diff --git a/src/api/routers/chat.py b/src/api/routers/chat.py index 23f31344..d8387c98 100644 --- a/src/api/routers/chat.py +++ b/src/api/routers/chat.py @@ -531,6 +531,11 @@ def _build_system_prompt( "exist yet, reply: 'To save memories you need a memory agent first. " "I can create one for you — just say **create a memory agent**.'" " Then include [button:Create Memory Agent:/agents?spawn=1&skill=memory+agent].\n" + "- Use `try_it_out` when message contains 'try-it-out', 'tryit', '/tryit', 'run demo', " + "'show me demo', or 'template_id='. Pass the template_id exactly as given. " + "IMPORTANT: try_it_out creates its own demo agent automatically — it does NOT require " + "any pre-existing agent or plugin in DATA REGISTRY. Never refuse a try_it_out request " + "because of missing agents.\n" "- Answer in markdown for all other questions.\n\n" "Response formatting rules:\n" "- ALWAYS embed inline links when you mention any NebulaOS page or feature. " @@ -554,6 +559,9 @@ def _build_system_prompt( "Anti-hallucination rules:\n" "- ONLY reference agents, plugins, models, and tasks listed in SYSTEM STATE below.\n" "- NEVER invent agent names, plugin names, or capabilities not in SYSTEM STATE.\n" + "- EXCEPTION: try_it_out, create_agent, and create_plugin all CREATE new entities — " + "they do NOT need pre-existing DATA REGISTRY entries. Never refuse these because " + "of empty DATA REGISTRY.\n" "- If asked about a capability that doesn't exist, say so clearly.\n" "- Do NOT claim web scraping, document parsing, PDF reading, or email/calendar access " "are available — these are not yet implemented.\n\n" diff --git a/webapp/src/components/layout/ChatWorkspace.tsx b/webapp/src/components/layout/ChatWorkspace.tsx index 0a2c0a37..ecbc5ab8 100644 --- a/webapp/src/components/layout/ChatWorkspace.tsx +++ b/webapp/src/components/layout/ChatWorkspace.tsx @@ -2224,8 +2224,8 @@ export function ChatWorkspace() { const templateArg = args.trim() const knownId = TRY_IT_TEMPLATES.find(t => t.id === templateArg || t.label.toLowerCase().includes(templateArg.toLowerCase())) const msg = knownId - ? `Run the try-it-out demo: ${knownId.label}` - : `Run a try-it-out demo: ${templateArg}` + ? `Run try-it-out demo template_id=${knownId.id}` + : `Run try-it-out demo template_id=${templateArg}` const sid = await ensureSession(msg).catch(() => undefined) nebulaMut.mutate({ message: msg, sid }) return true