A new Xano API group emits OpenUI Lang strings directly. The frontend deletes its events [] → Lang adapter and feeds responses straight into <Renderer/>. Server is now the single source of truth for the rendered shape — same-firm dedup, banned-phrase lint, signal-taxonomy tag enforcement all run inside Xano.
The previous Anything Engine (group 1270) returned a Crayon-shaped events [{event, data}] array that the Next.js BFF (sandbox) translated into OpenUI Lang for the <Renderer/>. That adapter — 513 LOC of strLit / posArgs / contactCardExpr / same-firm dedup / stale-not-implemented interception — duplicated across every consumer.
OpenUI 0.5 (group 1276 / canonical C5i2nPpF) collapses that. Each endpoint emits a fully-formed root = Root([...]) program ready for the Renderer. Banned-phrase lint, signal-taxonomy tag enforcement, and same-firm dedup run server-side. The legacy events[] shape is still emitted by /openui05/dispatch for sandbox-BFF compatibility — drop it once consumers migrate.
Base: https://xh2o-yths-38lt.n7c.xano.io/api:C5i2nPpF
events[] + openui_lang + chain_used.class_override to skip routing. Confidence < 0.7 returns ask_back with a clarify openui_lang program.openui_lang.[portfolio]/[co-investor]/[board]/[thesis] — enforced server-side; missing tag drops the card.find_partners/synthesize.md — leads with shared customer base, complementary distribution, prior co-marketing, or technical integration pattern.get_advice per Mark's class registry.suggestion_request_id; embeds non-empty narratives via OpenRouter text-embedding-3-small so the row is prefilter-eligible.{ready, narrative_count, missing_fields, profile}.founder_fit_derived_vector vs pitch founder_fit_vector. ~2000 rows, <2s lambda. Honors excluded_uuids banlist.reasoning string. JSON-decoder hardened against truncation.{ready, summary, next_question, missing_fields}.suggestion_request row so the file-upload pipeline has something to attach to before the user has submitted.file + suggestion_request_file tables; downstream lambda builds the pitch profile.node_uuids for the prefilter exclude_list. Alias-tolerant (a16z ↔ Andreessen Horowitz).The OpenUI Lang tokenizer treats < as a less-than operator, not an opening tag — there is no JSX grammar. Every program is an assignment list with a mandatory root. Component names are PascalCase. Arguments are positional in the order their Zod schema keys are defined.
# Multi-card find_investors response — what the find-X endpoints emit: v0 = ScanningCard("Scanning investor universe", "graph_rag returned 3 candidates", 11948, 3, "complete") v1 = ContactCard("Jane Smith", "Partner", "Founders Fund", "Leads Series A in regulated medtech", "Closed two FDA-cleared imaging deals in 2025; partner Cara Liu chairs the cardiology IC. [portfolio]", "", 0.87) v2 = ContactCard("Bob Lee", "Principal", "a16z", "Fintech operator turned investor", "a16z's last six fintech checks tracked the same Series A band as your raise. [thesis]", "", 0.74) root = Root([v0, v1, v2])
components.tsx Zod schemas)| Component | Positional arguments |
|---|---|
Root | (children: array) |
ContactCard | (name, role?, company?, thesis_summary?, why?, linkedin_url?, match_score?, master_person_id?, person_id?, avatar?, context_line?) |
ScanningCard | (title?, subtitle?, connections_analyzed?, potential_matches?, status?, note?) |
ErrorState | (kind?, title?, description?) — kind ∈ {no-results, auth, rate-limit, network, backend, clarify, unknown} |
ErrorMessage | (message, detail?) — sandbox-shape inline error |
NoMatchesCard | (title, suggestion) |
ContactCard("Jane") is valid; everything after the first slot defaults to undefined.curl -X POST https://xh2o-yths-38lt.n7c.xano.io/api:C5i2nPpF/openui05/classify \ -H "Content-Type: application/json" \ -d '{"query":"anything","class_override":"find_investors"}' { "class": "find_investors", "count": 25, "confidence": 1, "reasoning": "class_override supplied by caller", "raw": "", "skipped_routing": true, "openui_lang": null }
curl -X POST https://xh2o-yths-38lt.n7c.xano.io/api:C5i2nPpF/openui05/classify \ -d '{"query":"help me find people"}' { "class": "ask_back", "count": 0, "confidence": 0.2, "reasoning": "Query is too vague. Are you looking for investors, talent, customers, ...?", "openui_lang": "root = Root([clarify])\nclarify = ErrorState(\"clarify\", \"Need a bit more to go on.\", \"Query is too vague. Are you looking for investors, talent, customers, ...?\")" }
curl -X POST https://xh2o-yths-38lt.n7c.xano.io/api:C5i2nPpF/openui05/find-investors \ -d '{"query":"Series A enterprise SaaS investors","count":3}' { "ok": true, "graph_count": 3, "synth_source": "anthropic", "investors": [ { "name": "S3 Ventures", "thesis_summary": "S3 Ventures is the largest venture capital firm focused on Texas...", "why": "S3 Ventures has deployed capital into four healthcare technology companies in recent rounds... Their co-investor network includes specialized healthcare funds like Vensana Capital and Omega Funds, suggesting comfort with complex technical sales cycles typical of enterprise SaaS. [portfolio]", "match_score": 0.63 }, ... ], "lint_dropped": [], "openui_lang": "v0 = ScanningCard(\"Scanning investor universe\", \"graph_rag returned 3 candidates\", 11948, 3, \"complete\")\nv1 = ContactCard(\"S3 Ventures\", null, ...)\nroot = Root([v0, v1, v2, v3])" }
curl -X POST https://xh2o-yths-38lt.n7c.xano.io/api:C5i2nPpF/openui05/dispatch \ -d '{"query":"Series A medtech investors","class_override":"find_investors","requested_n":3}' { "ok": true, "classification": {"class": "find_investors", "confidence": 1, ...}, "events": [ {"event": "text", "data": "Routed -> find_investors. class_override supplied by caller"}, {"event": "tpl", "data": {"name": "scanning_card", "templateProps": {...}}}, {"event": "tpl", "data": {"name": "contact_card", "templateProps": {...}}}, ... ], "openui_lang": "v0 = ScanningCard(...)\nv1 = ContactCard(\"MedVenture Partners\", ..., \"...backed CorVista Health through Series C... [co-investor]\", null, 0.41)\n...\nroot = Root([v0, v1, ...])", "latency_ms": 17234 }
Sandbox case 13 (Sequoia regression) and the deck-context "Orbiter.io" leak both proved that prompt-only enforcement of voice rules is unreliable under recency load. OpenUI 0.5 runs a deterministic post-synthesis lint pass per find-X endpoint:
[portfolio] / [co-investor] / [board] / [thesis]. Missing tag = card dropped. The frontend renders the tag as a separate chip below the WHY paragraph (Portfolio match · Co-investor · Board overlap · Thesis match).company values collapse to a single card with the highest match_score as primary; the others append as a "+ N other (Name Role)" byline.else branch surfaces a NoMatchesCard explaining the class is being scoped — replaces internal "X classes pending" plumbing strings with user-facing copy.The full lint pass + dedup + Lang assembly runs in three Xano api.lambda blocks chained inside each find-X endpoint. ~30ms total cost over a ~22s synthesis call.
Per prompts/_shared/model-selection.md:
allow_fallbacks: true) — resilience tier. Fires automatically when Anthropic returns non-200 or empty content.The classifier and interviewer NEVER block dispatch on fallback failure — they degrade to ask_back with a clarify card. find-X endpoints drop cards rather than ship degraded WHYs.
// src/features/anything-engine/openui/anything-engine-canvas-openui.tsx import { Renderer } from "@openuidev/react-lang"; import { openui05DispatchFn } from "../server/openui05-dispatch-fn"; import { anythingEngineLibrary } from "./components"; const result = await openui05DispatchFn({ data: { query, requested_n: 20, thread_id: SESSION_THREAD_ID }, }); return <Renderer response={result.openui_lang} library={anythingEngineLibrary} />;
The previous crayon-to-openlang.ts adapter (320 LOC) is deleted. The canvas no longer touches events[] at all — server is the source of truth for the rendered shape.
Verified live in the network-tab Anything Engine canvas (/network?active-view=anything-engine): clicking the Find investors tile fires openui05DispatchFn, which calls /openui05/dispatch. The response's openui_lang string feeds straight into <Renderer/>. ContactCards render with Portfolio match tag chips, italic thesis summary bylines, and indigo match score pills. End-to-end latency: ~22s for find_investors at count=3.
else branch and surface a NoMatchesCard explaining scoping is in progress. Mark's interview prompts exist for 8 of 9 — purchase_real_estate still needs an interview.md./openui05/dispatch tool_calls[] handler currently logs update_pitch_profile calls with status deferred_to_fn_12918. The actual write+re-embed is wired through Xano fn 12918 in the next iteration./anything-engine/pitch-profile, /prefilter, /final-trim from group 1270) is not yet ported to OpenUI 0.5 native. The new find-investors works in fallback-only mode (no chain). For full deck-aware retrieval, the legacy 1270 endpoints still fire when suggestion_request_id is set.polish-bar-inventory.md (outcome_card, leverage_loop_card, meeting_prep_card, meeting_goal_card, memory_card, serendipity_card, button_group, submit_button, error_card, question_card, question_card_enhanced, quick_result_card, loading_indicator, interview_card, dispatch_confirmation) are not yet registered in the OpenUI 0.5 component library. Wrappers are scoped — they import the existing copilot Crayon templates and translate positional args → props.