# ibl.ai Platform Documentation ## Complete product documentation for the ibl.ai application, in one file ABOUT THIS FILE This is the entire ibl.ai platform documentation concatenated into a single plain-text document. It covers every screen of the application — chat and Canvas, agent settings, analytics, integrations, notifications, organization administration, and user profiles. HOW TO USE IT - Reference it live at https://ibl.ai/docs.txt (always the latest version). - Download the page and keep it, or paste it into your LLM / AI agent as context so it can answer questions about how the ibl.ai platform works. - Browse the same content as web pages, one screen per page, starting at https://ibl.ai/docs/os/overview. Developer documentation (the open-source repos) and the REST API reference are NOT in this file — they live separately at https://ibl.ai/developer. organization: ibl.ai type: Agentic AI Operating System website: https://ibl.ai documentation: https://ibl.ai/docs/os/overview developer_docs: https://ibl.ai/developer github: https://github.com/iblai generated: 2026-10-05 total_pages: 78 deployment_models: SaaS, on-premise, private cloud (AWS/Azure/GCP), air-gapped compliance: SOC2, FERPA llm_support: OpenAI, Anthropic, Google, Meta Llama, DeepSeek, Mistral, and any OpenAI-compatible API --- ## OS Platform Overview URL: https://ibl.ai/docs/os/overview # OS Platform Overview ![The OS chat interface at os.ibl.ai, showing the agent workspace with the message composer and sidebar](/images/docs/os/chat-canvas/chat.webp) ## What Is OS? OS is ibl.ai's open-source AI agent platform. It lets organizations build, deploy, and manage intelligent conversational agents — from prototype to production — on infrastructure where you own all the code and the data, with full control over models and branding. The platform runs in production at [os.ibl.ai](https://os.ibl.ai) and the source code is available at [github.com/iblai/os](https://github.com/iblai/os). It ships as a web application, as desktop apps for macOS, Windows, and Linux, and as mobile apps for iOS and Android. This documentation section covers every screen of the application: the chat and Canvas workspace, per-agent settings, analytics dashboards, organization administration, user profiles, and notifications. ## Core Capabilities #### AI Agents Create custom agents with configurable LLMs, system prompts, tools, and safety filters. Every agent has its own settings, datasets, and access rules — see [Agent Settings: Basic Information](agent-settings/basic.md). #### RAG Training Ground agents in your own data: upload documents, connect Google Drive, OneDrive, or Dropbox, or crawl websites. Managed per agent under [Datasets](agent-settings/datasets.md) and per organization under [Data Source Integrations](organization-settings/integrations-data-sources.md). #### Voice Calls Real-time voice conversations with agents over WebRTC, powered by LiveKit. Configured in [Voice settings](agent-settings/voice.md) and [Voice Calls](agent-settings/voice-call.md). #### Canvas / Artifacts Generate, edit, version, and export rich documents alongside chat. See [Canvas](chat-canvas/canvas.md), [Canvas Options](chat-canvas/canvas-options.md), and [Downloading a Canvas](chat-canvas/canvas-download.md). #### Code Mode Scaffold, modify, and run a real application from inside the chat box, building on the Agentic Vibe starter, with every tool call gated behind an explicit Allow / Deny. See [Code Mode](chat-canvas/code-mode.md). #### Deep Research & Web Search Extended multi-step reasoning for complex queries, plus live web results to ground responses. Available from the [chat interface](chat-canvas/chat.md). #### MCP Servers Extend agent capabilities with Model Context Protocol tool servers, configured per agent in [MCP Servers](agent-settings/mcp.md). #### Analytics Usage dashboards, per-user activity, topic analysis, a transcript viewer, cost tracking, and exportable data reports. See the [Analytics section](analytics/overview.md). #### Evaluations Measure and improve agent quality: run an agent against a benchmark of test questions, then score every response with LLM-as-Judge reviews and human annotations, and export the results. See [Evals](agent-settings/evals.md). #### Rubric Grading Let an agent grade work against a rubric you define: choose whether it scores a submission or the whole conversation, how much feedback the person sees, and the criteria and point values it marks against. See [Grader](agent-settings/grader.md). #### Projects & Workflows Group a body of work — its files, its standing instructions, and the agents assigned to it — into a [Project](chat-canvas/projects.md), and lay out a multi-step agent run as a graph in the [workflow builder](chat-canvas/workflows.md), with branches, loops, guardrail checks, and human approval steps. #### Multi-Organization, SSO & RBAC Full organization isolation with per-organization configuration and branding, Single Sign-On, and granular role-based access control with roles, policies, groups, and teams. See [Organization Settings](organization-settings/organization.md). #### Billing, Spend Limits & Monetization Stripe-backed subscription management and usage-based pricing at the organization level, plus enforceable ceilings on LLM spend at three scopes — the whole workspace, one agent, or one person on one agent — that block or alert when they are reached. See [Billing](organization-settings/billing.md), [Agent Billing](agent-settings/billing.md), and [Monetization](organization-settings/monetization.md). #### Memory Administration Memories belong to people and to agents, and an administrator can manage both: a user's own memories on their [Profile](profile/memory.md), an agent's in its [Memory settings](agent-settings/memory.md), and everyone's from the organization's [Memory](organization-settings/memory.md) tab — including the switches that decide whether anything is captured at all. #### Conversation History & Export Every user can review and export their own conversations from [Profile: History](profile/history.md), while administrators review a whole agent's conversations in [Chat History](agent-settings/history.md). #### Embedding & API Access Embed agents in any website via iframe with custom styling, and integrate programmatically with API keys and LTI 1.3 for LMS platforms. See [Embed](agent-settings/embed.md), [API Access](agent-settings/api.md), and the LTI pages. #### Human Support Let people chatting with an agent hand the conversation to a human. Escalations arrive as tickets a support team can filter, reply to, and resolve — in the app or over the API. See [Support](agent-settings/support.md). ## Documentation Map #### Chat & Canvas The end-user workspace: [Chat Interface](chat-canvas/chat.md) · [Code Mode](chat-canvas/code-mode.md) · [Explore Agents](chat-canvas/explore.md) · [Projects](chat-canvas/projects.md) · [Workflows](chat-canvas/workflows.md) · [Canvas](chat-canvas/canvas.md) · [Canvas Options](chat-canvas/canvas-options.md) · [Downloading a Canvas](chat-canvas/canvas-download.md) · [Renaming a Canvas](chat-canvas/canvas-rename.md) #### Agent Settings Everything configurable on a single agent: [Basic](agent-settings/basic.md) · [System Prompt](agent-settings/prompt.md) · [LLM Selection](agent-settings/llm-selection.md) · [LLM Configuration](agent-settings/llm-configuration.md) · [Capabilities](agent-settings/capabilities.md) · [Grader](agent-settings/grader.md) · [Tools](agent-settings/tools.md) · [Skills](agent-settings/skills.md) · [MCP Servers](agent-settings/mcp.md) · [Datasets](agent-settings/datasets.md) · [Memory](agent-settings/memory.md) · [Voice](agent-settings/voice.md) · [Voice Selector](agent-settings/voice-selector.md) · [Voice Calls](agent-settings/voice-call.md) · [Safety](agent-settings/safety.md) · [Privacy](agent-settings/privacy.md) · [Disclaimers](agent-settings/disclaimers.md) · [Discovery](agent-settings/discovery.md) · [Access Control](agent-settings/access.md) · [Embed](agent-settings/embed.md) · [API Access](agent-settings/api.md) · [Agent Analytics](agent-settings/analytics.md) · [Evals](agent-settings/evals.md) · [Audit Log](agent-settings/audit.md) · [Chat History](agent-settings/history.md) · [Support](agent-settings/support.md) · [Tasks](agent-settings/tasks.md) · [Billing](agent-settings/billing.md) · [Sandbox](agent-settings/sandbox.md) · [LTI Keys](agent-settings/lti-keys.md) · [LTI Links](agent-settings/lti-links.md) · [LTI Tool Endpoints](agent-settings/lti-tool-endpoints.md) · [LTI Tools](agent-settings/lti-tools.md) #### Analytics Organization-wide insight: [Overview Dashboard](analytics/overview.md) · [Users](analytics/users.md) · [Topics](analytics/topics.md) · [Transcripts](analytics/transcripts.md) · [Costs](analytics/costs.md) · [Data Reports](analytics/data-reports.md) · [Audit](analytics/audit.md) #### Organization Settings Organization administration: [Organization](organization-settings/organization.md) · [Users](organization-settings/users.md) · [Groups](organization-settings/groups.md) · [Teams](organization-settings/teams.md) · [Roles](organization-settings/roles.md) · [Policies](organization-settings/policies.md) · [Alerts](organization-settings/alerts.md) · [LLM Integrations](organization-settings/integrations-llms.md) · [Data Source Integrations](organization-settings/integrations-data-sources.md) · [Memory](organization-settings/memory.md) · [Virtual Machine](organization-settings/virtual-machine.md) · [Billing](organization-settings/billing.md) · [Monetization](organization-settings/monetization.md) · [Advanced](organization-settings/advanced.md) #### Profile Per-user account pages: [Basic Information](profile/basic.md) · [Education](profile/education.md) · [Education Credentials](profile/education-credentials.md) · [Experience](profile/experience.md) · [Resume](profile/experience-resume.md) · [Social Links](profile/social.md) · [Memory](profile/memory.md) · [History](profile/history.md) · [Privacy](profile/privacy.md) · [Security](profile/security.md) · [Purchases](profile/purchases.md) #### Notifications Staying informed: [Inbox](notifications/inbox.md) · [Alerts](notifications/alerts.md) #### Common Components Shared building blocks that appear across all ibl.ai applications — the profile dialog, notification center, analytics dashboards, and organization settings: [Common Components](common-components/overview.md) ## Related Resources #### Source Code The full application is open source at [github.com/iblai/os](https://github.com/iblai/os) under the MIT license. #### API Skills & MCP Server [github.com/iblai/vibe](https://github.com/iblai/vibe) packages 51 headless agent skills and a chat MCP server for operating any ibl.ai organization from an AI agent. #### Vibe [github.com/iblai/vibe](https://github.com/iblai/vibe) is the companion toolkit for building and shipping ibl.ai applications, including the build skills used to produce the desktop and mobile releases of OS. --- ## Downloading a Canvas URL: https://ibl.ai/docs/os/chat-canvas/canvas-download # Downloading a Canvas ![The Canvas Export menu open, offering PDF Document (.pdf), Microsoft Word (.docx), and Markdown Document (.md)](/images/docs/os/chat-canvas/chat_canvas_download.webp) ## Overview Every Canvas document can be downloaded in three formats — PDF, Microsoft Word, and Markdown — from the **Export** button in the Canvas header. The export always captures the version of the document currently displayed in the panel, including any manual edits you have made. Exporting preserves the document's structure: headings, lists, tables, code blocks, and even mathematical notation are converted to a readable form in each target format. The file is named after the document's title, so renaming the Canvas first (see [Renaming a Canvas](canvas-rename.md)) gives the download a clean filename. The Export menu is available whenever a Canvas is open. It is disabled briefly while an export is being prepared ("Exporting…") or while an autosave is in flight. ## Target Audience **User** ## Features #### Export button A blue button in the Canvas header that opens the format menu. While a download is being generated it shows a spinner and the label "Exporting…", and a "Preparing document..." overlay may appear on the document. #### PDF Document (.pdf) Renders the document — title, formatting, and layout — into a paginated PDF and downloads it as `.pdf`. A "Document exported as PDF" confirmation appears when the file is ready. #### Microsoft Word (.docx) Converts the document into a Word-compatible file named `<title>.docx`, with the document title as a heading. Confirmed by "Document exported as DOCX". #### Markdown Document (.md) Downloads the document's markdown source as `<title>.md` — the most portable format for pasting into wikis, repositories, or other editors. Confirmed by "Document exported as Markdown". #### Current-view export The export uses the content currently shown in the editor. If you are viewing a previous version, that version is what downloads — a simple way to export an older draft without restoring it. ## How to Use #### Step 1: Open the document Click **Open Canvas** on the document's preview card in chat so the Canvas panel is showing the content you want to download. #### Step 2: Pick the version If you want an older draft, navigate to it with the version menu next to the title. Otherwise stay on the latest version. #### Step 3: Export Click **Export** in the Canvas header and choose **PDF Document**, **Microsoft Word**, or **Markdown Document**. The file downloads through your browser, and a toast confirms the export. --- ## Canvas Options URL: https://ibl.ai/docs/os/chat-canvas/canvas-options # Canvas Options ![The Canvas AI edit menu expanded from the pencil button, showing the emoji, polish, reading level, and length controls](/images/docs/os/chat-canvas/chat_canvas_options.webp) ## Overview The Canvas options menu is a set of one-click AI editing controls for the open document. Instead of typing revision requests into chat, you pick a transformation — adjust the length, change the reading level, add emojis, or apply a final polish — and the agent rewrites the whole document accordingly. The menu lives behind the floating pencil button in the bottom-right corner of the Canvas panel. Hovering or clicking the pencil expands a vertical toolbar of four icons, each with a tooltip naming its action. Every transformation is sent to the agent as a full-document update, so the result streams back into the Canvas and is captured as a new version — you can always step back to the previous version if you prefer the original. ## Target Audience **User** ## Features #### Pencil button The entry point. It sits at the bottom-right of the Canvas panel; hovering or clicking it expands the options toolbar, and clicking elsewhere collapses it. #### Add emojis (smiley icon) Opens an "Add emojis" picker with four choices: **Words** (replace as many words as possible with emojis), **Sections** (decorate the start or end of every major section), **Lists** (add emojis to list items), and **Remove** (strip emojis from the document). Selecting an option applies it immediately. #### Add final polish (sparkles icon) Asks the agent to apply a finishing pass: add a document title or section titles where relevant, and check grammar, mechanics, and consistency. Click the sparkles icon once to arm it, then click the send arrow that replaces it to run the polish. #### Reading level (book icon) Opens a vertical slider with six positions: **Graduate School**, **College**, **High School**, **Keep current reading level**, **Middle School**, and **Kindergarten**. Drag the handle to a level and click the send arrow to have the agent rewrite the document at that reading level. Leaving it on "Keep current reading level" cancels without changes. #### Adjust the length (up-down arrows icon) Opens a vertical slider with five positions: **Longest** (75% longer), **Longer** (50% longer), **Keep current length**, **Shorter** (50% shorter), and **Shortest** (75% shorter). Drag to the desired length and click the send arrow to apply. Leaving it on "Keep current length" cancels without changes. ## How to Use #### Step 1: Open the options With a Canvas document open, hover over or click the pencil button in the bottom-right corner of the panel. The four option icons expand above it. #### Step 2: Choose a transformation Click the smiley (emojis), sparkles (polish), book (reading level), or arrows (length) icon. #### Step 3: Set the level and send For reading level and length, drag the slider handle to the position you want — the label appears beside it — then click the send (arrow) button. For emojis, pick Words, Sections, Lists, or Remove. For polish, click the send arrow that appears on the sparkles icon. #### Step 4: Review the result The agent streams the rewritten document into the Canvas as a new version. If you prefer the previous text, use the version menu next to the title to go back and restore it. --- ## Renaming a Canvas URL: https://ibl.ai/docs/os/chat-canvas/canvas-rename # Renaming a Canvas ![The Rename Canvas dialog with a Canvas Title field, and Cancel and Save buttons](/images/docs/os/chat-canvas/chat_canvas_rename_title.webp) ## Overview Every Canvas document has a title, shown in the panel header and on the preview card in chat. The agent names the document when it creates it (for example "EduMind AI Business Plan"), and you can rename it at any time from the Rename Canvas dialog. The title matters beyond labeling: exported files are named after it (`<title>.pdf`, `<title>.docx`, `<title>.md`), so a clear title produces clean downloads. Renaming applies to the document itself, so the new name appears everywhere the Canvas is referenced. To open the dialog, click the document title in the Canvas header — its tooltip reads "Click to rename". Renaming is temporarily unavailable while the agent is still streaming content into the document. ## Target Audience **User** ## Features #### Canvas Title field A single text input pre-filled with the current title. Type the new name; the field placeholder reads "Enter new canvas title". Pressing Enter saves, and pressing Escape closes the dialog without saving. #### Save button Commits the new title (showing "Renaming..." while it saves). The button stays disabled when the field is empty or the title is unchanged, so you cannot save a blank or identical name. #### Cancel button Closes the dialog without changing the title. The **X** in the dialog corner does the same. ## How to Use #### Step 1: Open the rename dialog With the Canvas open, click the document title in the panel header. The Rename Canvas dialog appears with the current title selected. #### Step 2: Enter the new title Replace the text in the **Canvas Title** field with the new name. #### Step 3: Save Click **Save** (or press Enter). The header, the preview card in chat, and future exports all use the new title. Click **Cancel** or press Escape to discard the change instead. --- ## Canvas URL: https://ibl.ai/docs/os/chat-canvas/canvas # Canvas ![The Canvas panel open beside the chat, showing a formatted business-plan document with the editing toolbar and Export button](/images/docs/os/chat-canvas/chat_canvas_open.webp) ## Overview Canvas is the document workspace of OS. When the Canvas tool is active, the agent writes long-form output — plans, reports, essays, specifications — into a rich document that opens in a panel beside the chat instead of scrolling by as a plain message. The panel is a full rich-text editor: the document renders with real headings, lists, and tables, and you can edit it directly while continuing the conversation on the left. Edits save automatically, every AI revision is kept as a version you can navigate and restore, and the finished document exports to PDF, Word, or Markdown. To open it, click **Open Canvas** on a Canvas preview card in any agent response. The chat stays live in the left column — you can keep prompting the agent to revise the document while you watch it update. ## Target Audience **User** ## Features #### Document title (click to rename) The header shows the document title next to a file icon. Clicking the title opens the Rename Canvas dialog (see [Renaming a Canvas](canvas-rename.md)). #### Version navigation When a document has more than one version, a menu next to the title offers **Previous Version** and **Next Version** and shows "Version X of Y". Viewing an older version displays a banner — "You are viewing a previous version" — with **Restore this version** and **Back to latest version** buttons. Restoring makes the older version editable again as the current one. #### Undo / Redo The first two toolbar buttons undo and redo your manual edits inside the editor. #### Heading buttons (H1, H2, H3) Toggle the selected text between heading levels 1–3. #### Bold and Italic Standard character formatting for the selected text. #### Inline code and code block The `</>` button toggles inline code on the selection; the file-code button toggles a full code block with syntax highlighting. #### Quote Toggles a blockquote on the selected paragraph. #### Autosave status As you type, the header shows "Saving…" and then "All changes saved" (or an error message if a save fails). There is no manual save button — edits persist automatically. #### Export The **Export** button downloads the document as PDF, Microsoft Word, or Markdown (see [Downloading a Canvas](canvas-download.md)). #### Close (X) Closes the Canvas panel and returns the full width to the chat. The document remains available from its preview card in the conversation. #### Direct editing The document body is fully editable — click anywhere and type. On mobile widths the toolbar collapses to undo/redo plus a dropdown with the remaining formatting options. #### AI edit controls A floating pencil button in the bottom-right corner of the panel expands into quick AI editing actions (add emojis, final polish, reading level, length) that instruct the agent to rewrite the document (see [Canvas Options](canvas-options.md)). #### Chat-driven revisions The conversation stays connected to the document: asking the agent for changes ("expand the SWOT analysis") streams a revision into the Canvas, and each revision becomes a new version. ## How to Use #### Step 1: Generate a document With the **Canvas** chip active in the composer, ask the agent for a document (for example, a business plan). The response includes a Canvas preview card. #### Step 2: Open the Canvas Click **Open Canvas** on the card. The document opens in the right-hand panel with the chat still active on the left. #### Step 3: Edit directly or via the agent Edit text in place with the formatting toolbar, or send revision requests in chat and watch the document update. The header confirms "All changes saved" as you work. #### Step 4: Manage versions Use the version menu next to the title to step through **Previous Version** / **Next Version**, and click **Restore this version** if you want to roll back. #### Step 5: Export or close Click **Export** to download the document, or **X** to close the panel and return to full-width chat. --- ## Chat Interface URL: https://ibl.ai/docs/os/chat-canvas/chat # Chat Interface ![The OS chat interface showing an agent response with a Canvas preview card, suggested follow-up questions, and the message composer with Canvas and Memory tools enabled](/images/docs/os/chat-canvas/chat.webp) ## Overview The chat interface is the main workspace of OS, ibl.ai's open-source AI agent platform. It is where you converse with an AI agent: you type (or dictate) a prompt, the agent streams back a response, and rich outputs such as Canvas documents appear inline in the conversation. The screen is organized into three zones. The top bar holds the LLM model selector, the agent selector, and the User/Admin mode toggle; the center shows the running conversation; and the bottom holds the message composer with its tool chips and voice controls. You land on the chat interface immediately after signing in at [os.ibl.ai](https://os.ibl.ai) and selecting an agent. The left icon rail navigates to the other areas of the platform (new chat, Explore, chat history, projects, analytics, notifications, and settings). On your very first visit a short guided tour points out the controls described below — see [First-visit product tour](#first-visit-product-tour). ## Target Audience **User** | **Administrator** (the model selector and the User/Admin toggle are administrator-only) ## Features #### First-visit product tour The first time you land on the chat page, a short guided tour walks you through the controls. Each step dims the rest of the screen and puts a tooltip beside the element it is describing, with a **Next** button, a **Back** button, an `n of N` counter, and a **Skip tour** link. The tour has up to six steps, in this order: | # | Step | What it points at | Shown when | |---|---|---|---| | 1 | Ask anything | The message composer | Always | | 2 | Your profile | The profile menu in the top bar | You are signed in | | 3 | Private mode | The private-mode toggle in the top bar | The toggle renders (the feature is enabled for your organization) | | 4 | Conversation starters | The starter pills under the composer | The agent has starters configured. This step may scroll them into view | | 5 | Explore agents | The **Agents** menu in the left sidebar | The Agents menu has items | | 6 | Manage your organization | The account tools in the sidebar footer (invites, management, integrations, and the rest) | **Administrators only**, and only while the User/Admin toggle is set to Admin | A step whose target is not on your screen is dropped before the tour opens, so the `n of N` counter always reflects the steps you will actually see. The submit button is deliberately not its own step — it sits inside the highlighted composer. **Finishing or skipping both count as seen.** **Done** on the last step, **Skip tour**, the **X**, and the `Esc` key all end the tour and record the outcome, and it does not open again. The outcome is stored on your user metadata rather than in the browser, so the tour follows your account and does not reappear when you sign in on another device or clear your browser data. Clicking the dimmed overlay does nothing, and clicks on the highlighted element itself are blocked while the tour is open, so a step cannot be dismissed by accident. Add `?tour=1` to the chat page's URL to replay the tour after you have completed it — useful when someone is walking a colleague through the platform, or when support needs to see what a new user sees. If the tour is ever reworked, everyone who saw the earlier version is shown the new one once. The tour runs on the agent chat page only, because most of its steps are the chat page's own controls. It does not open on Explore, projects, workflows, analytics, or notifications; it does not open in [embedded mode](../agent-settings/embed.md); and it does not open on a phone. When a first-visit dialog such as a disclaimer or a user agreement is on screen, the tour waits for you to dismiss it rather than covering it. All of the tour's copy is translated alongside the rest of the interface. #### LLM model selector The top-left control shows the LLM currently powering the agent (for example `gpt-4o-mini`, with the provider's logo). Administrators can click it to open the LLM model selection dialog and switch the agent to a different provider or model. Regular users see the agent's model but cannot change it. #### Agent selector Next to the model selector, a dropdown labeled with the current agent's name (for example `agentAI`) switches between agents and agent-related views. The dropdown also carries a top "New Chat" action, and, when available, a footer "Modify" action that forks the agent so you can customize your own copy. #### User / Admin toggle Administrators see a **User | Admin** switch in the top-right. In Admin mode the full administrative surface is available (model selection, settings, analytics); switching to User mode previews the platform exactly as a regular user experiences it. #### Notification bell The bell icon opens a dropdown listing recent notifications with their titles and relative timestamps. From the dropdown you can open a notification, click **View all** to go to the notification inbox, or click **Mark all as read**. #### Profile menu Your avatar in the top-right corner opens the user profile dialog, covering account details, memory, privacy, and security settings. #### Conversation view Your messages appear as right-aligned bubbles; agent responses appear on the left with the agent's avatar, name, and a timestamp. Responses stream in as they are generated and render full markdown, including tables, lists, and code blocks. #### Canvas preview card When the agent produces a document with the Canvas tool, the response embeds a preview card showing the document's title and the first lines of its content. Clicking **Open Canvas** opens the full document in the Canvas panel beside the chat (see [Canvas](canvas.md)). While the document is still being generated the card shows a "Generating..." indicator. #### Message actions Under each agent response sits a row of action icons: **Copy to Clipboard** copies the response; **Positive Feedback** and **Negative Feedback** (thumbs up/down) rate it; **Share** copies a share link to the clipboard; **Report Inappropriate Content** flags the message; **Read Aloud** speaks the response with text-to-speech (and toggles to "Stop Reading Aloud"); and **Retry** regenerates a new response to your last message. #### Suggested follow-up questions After a response, the platform proposes guided follow-up prompts as clickable pills (for example "What are the customer personas for EduMind AI?"). Clicking one sends it as your next message; the circular refresh button beside them fetches a new set of suggestions. #### Message composer The "Ask anything" box at the bottom is where you write prompts. Press Enter to send, or click the arrow submit button; while a response is streaming, the submit button becomes a stop button that halts generation. A configurable disclaimer — "AI is capable of making mistakes. Please review all responses." in the screenshot — is shown above the composer. #### Attach files (+) The **+** button opens the upload menu and its **Upload File** action, letting you attach documents or images to your message. Attached files are listed above the composer with per-file remove and retry controls. #### Tool chips (Canvas, Skills, Memory, and more) Inline chips in the composer toggle per-session tools: **Canvas** (generate documents into the Canvas panel), **Code** (scaffold and run a real application from the chat box — see [Code Mode](code-mode.md)), **Cowork**, **Skills** (browse the agent's skills), **Prompts** (open the prompt gallery), **Study Mode**, **Deep Research** (extended multi-step reasoning), and **Memory**. An active tool shows as a highlighted chip with an **X** to turn it off — in the screenshot, Canvas is active. The **Memory** chip opens a menu where you can view, add, edit, and delete the memories the agent keeps about you. When the composer is narrow, extra tools collapse into an overflow (`...`) menu. #### Skills and the `/` picker ![Chat page with a slash typed in the composer, showing a picker above it listing Image Creation /image-creation and Web Research /web-research](/images/docs/os/chat-canvas/chat_slash_skills.webp) Agent Skills are reusable playbooks the agent follows for a specific job. Type `/` as the first word of a message to open a picker listing the skills this agent carries, each shown by name and `/slug`. Arrow keys move through the list, Enter or Tab inserts `/slug ` into the composer, and Esc dismisses it — plain text that happens to start with `/` is never blocked. Only enabled skills appear. Administrators manage which skills an agent carries in [Agent Settings: Skills](../agent-settings/skills.md). #### Voice input The microphone icon records a voice message and transcribes it into the composer (its tooltip reads "Voice Record"). #### Voice call The waveform icon starts a real-time voice call with the agent, powered by WebRTC/LiveKit. Screen sharing into the chat session is also available from the composer when enabled for the agent. ## How to Use #### Step 1: Pick an agent Use the agent dropdown in the top bar to select the agent you want to talk to, or choose **New Chat** to start a fresh session. #### Step 2: Compose your prompt Type into the "Ask anything" box. Optionally attach files with **+**, toggle tools such as **Canvas** or **Deep Research**, or use the microphone to dictate. #### Step 3: Send and review Press Enter or click the arrow button. The response streams in; if the Canvas tool produced a document, click **Open Canvas** on the preview card to view and edit it. #### Step 4: Act on the response Use the action icons to copy, rate, share, report, or listen to the response — or click **Retry** to regenerate it. Click a suggested follow-up pill to continue the conversation with one click. --- ## Code Mode URL: https://ibl.ai/docs/os/chat-canvas/code-mode Video: https://www.youtube.com/watch?v=hGTsgflz8zg # Code Mode ## Overview Code Mode is the coding agent built into the OS chat box. Its own description is the plainest one: *"an agentic coding tool that edits files, runs commands, and commits changes in the folder you choose."* The **Code** chip sits in the message composer alongside Canvas, Prompts, and Memory (see [Chat Interface](chat.md)), so there is no separate IDE to open, no second tool to authenticate, and no context to re-explain to a different assistant. The conversation and the codebase are the same session. What lets a single prompt go this far is the toolkit underneath rather than the model on top. Code Mode builds from the **Agentic Vibe** starter template, which already carries SSO authentication, AI chat, user profiles, notifications, and analytics, and it draws on ibl.ai skills that teach the agent how to build against the platform. The agent composes building blocks your organization already owns instead of inventing a stack from scratch, which is a different failure profile from a general-purpose model guessing at APIs. Everything it produces is ordinary source in a folder you chose, building with your toolchain and deploying to your infrastructure. ## Target Audience **User** | **Administrator** ## Approvals Code Mode reads and writes files and runs commands on a real folder, so how it asks for permission is the most important setting on this page. #### The first-run dialog The first time you enable Code, it asks before doing anything: **"How should Code ask for approval?"** — *"Code can edit files and run commands in your workspace. Choose whether it checks with you first — you can change this later in the Code panel."* The two answers are **Ask me each time** and **Approve automatically**. There is deliberately **no default**. The dialog exists precisely because either answer picks a security posture on your behalf, and that is a choice the product declines to make for you. #### Ask Me Under **Approvals → Ask Me**, Code stops before each operation and waits. The prompt is a card titled **"Code needs your permission"**, naming the kind of action it wants to take — **read**, **write**, **exec**, **delete**, **move**, **search**, **fetch**, or **think** — with **Allow** and **Deny** buttons. This is the execution model rather than a courtesy dialog on the first call: the gate holds for every operation. Denying stops that action, not the conversation, so you can decline a step and redirect the agent. #### Automatic Under **Approvals → Automatic**, Code edits files and runs commands without asking. The panel states the trade-off directly: *"Code edits files and runs commands without asking. Use it only in folders you trust."* The setting can be changed at any time from the **Approvals** control in the Code panel, and it is remembered per agent. ## Features #### The Code chip A composer chip, alongside Canvas, Skills, Prompts, Study Mode, Deep Research, and Memory, with the tooltip *"An agentic coding tool for your project folder."* An active tool shows as a highlighted chip with an **X** to turn it off; on a narrow composer, extra tools collapse into an overflow (`...`) menu. #### Workspace Code works inside a folder you nominate. The panel's **Workspace** section offers **Select Workspace** (*"Choose your workspace folder"*), **New Workspace**, and **Open Folder** — plus **Open in Finder** on macOS and **Open in Explorer** on Windows. Workspaces are held per agent, so two agents do not share a folder unless you point them at the same one. #### Plan-before-acting The agent states its plan before it touches the workspace — what it intends to scaffold, what it will install, and what it will run — so you see the shape of the change before any file is written. #### Scaffolding from the Agentic Vibe starter Rather than generating an application shell token by token, the agent materializes the vibe-starter template and installs its dependencies. The generated project inherits the starter's wiring, so the agent's effort goes into what is specific to your request. #### Local preview The agent starts the dev server and the application runs locally, so the end of the conversation is a working app you can click rather than a diff you have to trust. #### Skills Code Mode draws on ibl.ai's Agent Skills — reusable, plain-language playbooks for a specific job. If they cannot be fetched the run still proceeds, with the notice *"Skills couldn't be synced — Code will run without them."* Administrators manage which skills an agent carries in [Agent Settings: Skills](../agent-settings/skills.md). #### On-device models Code can run against a local model when Local Models is enabled or the desktop app is offline. It must be a **tool-capable** model — the panel suggests `qwen3`, `llama3.2`, or `phi4-mini` — and warns that a model without tool support *"isn't available for Code — turns will fail."* The first run can take a few minutes while the model loads. ## Requirements #### Linux needs bubblewrap On Linux, Code runs its work in a **bubblewrap** (`bwrap`) child sandbox. Without it the Code chip stays visible but disabled, with the hint *"Code needs bubblewrap (bwrap). Install it with your package manager, then reopen the app."* Install `bubblewrap` and reopen the app. ## How to Use #### Step 1: Enable the Code chip Activate **Code** in the message composer. On first use, answer the approval dialog — **Ask me each time** is the conservative choice and can be relaxed later. #### Step 2: Choose a workspace Use **Select Workspace** to point Code at an existing folder, or **New Workspace** to start a fresh one. #### Step 3: Describe what you want built Write the request in plain language. The walkthrough above uses four words — `build a todo list website` — and the agent replies with its plan before acting. #### Step 4: Answer the permission prompts Under **Ask Me**, choose **Allow** or **Deny** on each **Code needs your permission** card. #### Step 5: Open the running app When the agent reports the dev server is up, open the local preview and use it. In the walkthrough the result is a working task board with Home, Profile, and Account routes, priority tags, Active and Done filters, and live counters. #### Step 6: Keep going in the same conversation Code Mode does not end at the scaffold. Ask for the next change in the same session — the agent already holds the context of what it built. ## Administration Code Mode's reach is a configuration decision, not a per-conversation promise. The controls in [Agent Settings: Sandbox](../agent-settings/sandbox.md) — a dedicated execution workspace on independent infrastructure, with isolated execution, allowlisting, and credential injection — determine what a coding agent may reach before anyone types a prompt. The approval mode and its per-action prompts then sit inside that boundary, so an organization sets the outer limit and the person in the conversation still governs each action within it. ## Related Resources #### Agentic Vibe The scaffolding layer Code Mode builds from is documented on the [Agentic Vibe product page](https://ibl.ai/product/agentic-vibe), with setup and environment variables in the [vibe skill setup guide](https://ibl.ai/developer/vibe/skill-setup). #### Announcement [Code Mode: From One Prompt to a Running App](https://ibl.ai/updates/code-mode) — the release walkthrough this page builds on. #### Related pages [Chat Interface](chat.md) · [Agent Settings: Skills](../agent-settings/skills.md) · [Agent Settings: Sandbox](../agent-settings/sandbox.md) --- ## Explore Agents URL: https://ibl.ai/docs/os/chat-canvas/explore # Explore Agents ## Overview Explore is the agent browser — the screen where you find an agent to talk to rather than configuring one you already have. It gathers every agent available to you into one searchable, filterable page and lets you start a conversation from any of them. The page is organised into four sections, each answering a different question. **Favorites** are the agents you have starred, so the ones you use daily sit at the top. **Featured** are the agents your organization has promoted. **Custom** are the agents built inside your organization. **All Agents** is the complete list, paged with a **See more** control. Above the sections sit a search box and a row of filters — category, subject, type, and LLM provider — that narrow every section at once. A **Create Agent** action appears for users whose role allows it. To reach this screen, open **Explore** in the left icon rail of the chat interface. ## Target Audience **Any User** | **Agent Builder** ## Panel Reference #### Search A text search across the agents available to you, matching on name and description. #### Filters Dropdowns that narrow the results — **Category**, **Subject**, **Type**, and **LLM Provider** — alongside a promotion filter. They combine with the search box and apply to every section on the page. #### Favorites The agents you have starred. This section only appears for a signed-in user, since a starred agent belongs to an account. #### Featured Agents promoted by your organization. This is the shelf an administrator curates for people who do not yet know what to look for. #### Custom Agents built inside your organization, as opposed to the defaults the platform ships with. #### All Agents Every agent available to you — "Explore agents and specialized learning assistants" — paged behind a **See more** control rather than loaded all at once. #### Agent card One card per agent, showing its avatar, name, a short description, and when it was last updated. Selecting the card opens a conversation with that agent. #### Star toggle The star on each card adds or removes the agent from **Favorites**. Starring requires a signed-in account. #### Create Agent Starts a new agent. The action is permission-gated — it is only offered to users whose role allows agent creation — and there is a matching **Create Custom Agent** card at the foot of the Custom section. ## How to Use #### Step 1: Open Explore In the chat interface, open **Explore** from the left icon rail. The page opens with your starred agents first, if you have any. #### Step 2: Search or filter Type what you are looking for, or narrow by category, subject, type, or LLM provider. The filters apply across all four sections, so a filtered page shows the matching favourites, featured, custom, and remaining agents together. #### Step 3: Star the agents you use often Use the star on a card to add an agent to **Favorites** so it is waiting at the top of the page next time. #### Step 4: Start a conversation Select an agent card to open a chat with that agent. #### Step 5: Create one if none fits If nothing on the page does the job and your role permits it, use **Create Agent** to build one. ## Behavior Notes - **Favourites need an account.** Starring is stored against the signed-in user, so the Favorites section does not appear for an unauthenticated visitor. - **Creation is permission-gated.** The **Create Agent** action only renders for roles that hold the create permission; everyone else browses without it. - **Sections can be turned off.** Which of the four sections appear is configurable, so a deployment may show a subset — a page without a Featured shelf is a configuration, not a fault. - **Filters narrow, they do not reorder.** The section structure stays the same under a filter; each section simply shows fewer agents. ## Building an Agent Browser Into Your Own App The agent browser ships in the ibl.ai SDK as a self-contained component, so a product you build can offer the same discovery surface. Install the [iblai/vibe](https://github.com/iblai/vibe) skills and mount `<AgentSearch>` from `@iblai/iblai-js/web-containers/next`, passing the handlers for what a card click and a create action should do in your app; which sections render is controlled by a prop, every label is overridable, and role gating can be switched on. For custom layouts the pieces are exported individually — the card, the search input, the filter row, the star toggle, and the empty state — along with the search and star hooks. The reusable skill for this workflow is [`iblai-vibe-agent-search`](https://github.com/iblai/vibe/tree/main/skills/iblai-vibe-agent-search), and the SDK overview is at [Vibe SDK](/developer/platform/vibe-sdk). --- ## Projects URL: https://ibl.ai/docs/os/chat-canvas/projects # Projects ![Project landing page showing the project title, the Ask anything chat input with Canvas and Prompts controls, the Project files and Add project instructions cards, and the Project Agents grid with an Add Agent button](/images/docs/os/chat-canvas/projects.webp) ## Overview A project is a named workspace that keeps a body of work — its files, its standing instructions, and the agents that act on it — together in one place. Opening a project replaces the usual chat welcome screen with a landing page for that work, so every conversation you start from it already carries the project's context. Three things belong to a project. **Project files** are the documents the agents in it can draw on. **Project instructions** tailor how the agents respond inside this project, without changing how they behave anywhere else. **Project Agents** are the agents assigned to the work, so a project can bring together several specialists rather than being tied to one. The chat input sits at the top of the landing page and behaves exactly as it does elsewhere — the same composer, the same Canvas and Prompts controls — with the difference that what you send is scoped to the project. To reach a project, open **Projects** in the left icon rail of the chat interface and select one. ## Target Audience **Any User** | **Agent Builder** ## Panel Reference #### Project title The project's name, at the head of the landing page. It identifies which body of work the conversation below it belongs to. #### Chat input The standard composer — "Ask anything" — with the same attachment, **Canvas**, **Prompts**, voice, and web-search controls documented on the [Chat Interface](/docs/os/chat-canvas/chat) page. Sending a message from here starts a conversation inside the project rather than a loose chat. #### Project files ![Project Files modal showing a dataset search, an Add Files button, and a table of files with Name, Type, Tokens, Interval, Visibility, and Status columns](/images/docs/os/chat-canvas/projects_files.webp) A card showing how many files the project holds; opening it lists them in the **Project Files** dialog. Each row carries the file's **Name**, **Type**, **Tokens**, refresh **Interval**, **Visibility**, and a **Status** switch, with a search box for finding one in a long list and **Add Files** for adding more. #### Add project instructions A card that opens the project's instructions — "Tailor the way the agent responds in this project." These sit alongside each agent's own prompts and apply only within the project, which is what makes a project a place to set house rules for one piece of work. #### Project Agents The grid of agents assigned to the project, each shown with its avatar, name, and description. **Add Agent** assigns another. ## How to Use #### Step 1: Open a project In the chat interface, open **Projects** from the left icon rail and pick the project you want to work in. Its landing page opens with the chat input ready. #### Step 2: Add the material the work depends on Open **Project files** and use **Add Files** to bring in the documents, exports, or datasets the agents should be able to draw on. The table shows what is already there and whether each file is active. #### Step 3: Set the project's standing instructions Open **Add project instructions** and describe how agents should behave in this project — the conventions, the audience, the format you want back. This is scoped to the project, so it does not change how the same agent answers elsewhere. #### Step 4: Assign the agents that will do the work Use **Add Agent** to bring the right agents into the project. Several can share one project when the work spans more than one specialism. #### Step 5: Work from the project Start conversations from the project's own chat input. They carry the project's files, instructions, and agent assignment with them. ## Behavior Notes - **A project scopes context, not capability.** The agents in a project are the same agents configured elsewhere; the project adds files, instructions, and a shared home for the conversations. - **Instructions are additive and local.** Project instructions layer on top of an agent's own prompts and apply only inside the project. - **Files are managed per project.** The Project Files dialog is the project's own list, with its own visibility and status switches per file. - **The composer is unchanged.** Canvas, prompts, attachments, voice, and web search all work exactly as they do in an ordinary chat. ## Building Projects Into Your Own App The project surface ships in the ibl.ai SDK as a mode of the same chat component used for ordinary conversations — passing a project identifier swaps the default welcome screen for the project landing page, so an app that already mounts chat gets projects for the cost of the routing. The file, instruction, and agent-assignment dialogs come with it. Install the [iblai/vibe](https://github.com/iblai/vibe) skills; the reusable skill for this workflow is [`iblai-vibe-project`](https://github.com/iblai/vibe/tree/main/skills/iblai-vibe-project), which builds on [`iblai-vibe-agent-chat`](https://github.com/iblai/vibe/tree/main/skills/iblai-vibe-agent-chat). The SDK overview is at [Vibe SDK](/developer/platform/vibe-sdk). --- ## Workflows URL: https://ibl.ai/docs/os/chat-canvas/workflows # Workflows ![Workflow editor showing the node-type sidebar grouped into Core, Tools, Logic, and Data, a canvas with Start, Agent, Guardrails, and End nodes connected by curved edges, a Guardrails configuration panel with safety-check checkboxes, and Connectors, Save, and Publish actions](/images/docs/os/chat-canvas/workflows.webp) ## Overview A workflow is an agent run you draw rather than describe. Where a prompt asks one agent to do everything in a single turn, a workflow lays the work out as a graph — an agent step here, a safety check there, a branch, a loop, a point where a human has to approve — and runs it in that order, every time. The editor has two halves. The **sidebar** on the left is the palette of node types, grouped by what they do. The **canvas** on the right is where you place nodes and connect them, with drag-and-drop, pan and zoom, undo and redo, and auto-save as you work. Above the canvas sit the workflow's name, its status, whether it has unsaved changes, and the **Connectors**, **Save**, and **Publish** actions. Selecting a node opens its configuration panel, and each node type has its own — an agent node asks for instructions and a model, a guardrails node offers a checklist of safety checks, a conditional node collects the conditions to branch on. ## Target Audience **Agent Builder** | **Administrator** ## Panel Reference #### Node-type sidebar The palette, grouped into four sections. **Core** holds the building blocks — an agent step, an **End** node, and a **Note** for annotating the graph. **Tools** holds **File search**, **Guardrails**, and **MCP**. **Logic** holds **If / else**, **While**, and **User approval**. **Data** holds **Transform** and **Set state**. Drag a type onto the canvas, or click it to add it. #### Canvas The graph itself: nodes joined by curved edges, with panning, zoom, and undo/redo, and a zoom control at the foot of the workspace. Changes save on their own as you work. #### Workflow header The workflow's name with an **Active** status badge, an **Unsaved changes** indicator when there is work not yet written, and a **Back** link out to the workflow list. #### Connectors Opens the connector management dialog, where the external connections a workflow's nodes can call are managed. #### Save and Publish **Save** writes the current graph. **Publish** promotes it to the running version — a workflow is validated before it is published, so a graph with a structural problem is refused rather than shipped. #### Node configuration panel Opening a node shows the settings for its type: - **Start** — the workflow's state variables, added through a modal with a type picker (String, Number, Boolean, Object, List). - **Agent** — a name, the instructions for this step, the model it runs on, and a **Continue on error** switch that decides whether a failure here stops the run or lets it carry on. - **If / else** — the list of conditions to branch on, added and removed as needed. - **While** — the expression that decides whether to loop again. - **Transform** — a mode switch between expressions and object form, then the key/value pairs to produce. - **Set state** — variable and value assignments. - **User approval** — a name and the message shown to the person whose approval the run waits on. - **Guardrails** — a checklist of safety checks: **PII Detection**, **Moderation**, **Jailbreak Detection**, and **Hallucination Check**. - **File search** — a query and a maximum number of results. - **MCP** — the connection to an MCP server. - **End** — the output the workflow returns. ## How to Use #### Step 1: Create a workflow From the workflow list, create a new one and give it a name. It opens in the editor with an empty canvas. #### Step 2: Lay out the steps Drag node types from the sidebar onto the canvas in the order the work happens, and connect them. A minimal workflow runs **Start → an agent step → End**. #### Step 3: Configure each node Select a node to open its panel. Give agent steps their instructions, declare the state variables the run needs on the **Start** node, and set the output on **End**. #### Step 4: Add the checks the work requires Insert a **Guardrails** node where output has to be screened and tick the checks that apply, and a **User approval** node anywhere a person must sign off before the run continues. #### Step 5: Branch and loop where the work is not linear Use **If / else** to take different paths on a condition, **While** to repeat a step until an expression stops being true, and **Set state** or **Transform** to carry values between steps. #### Step 6: Save, then publish Work is saved as you go and the header tells you when there are unsaved changes. When the graph is right, **Publish** validates it and promotes it to the running version. ## Behavior Notes - **Publishing is gated on validation.** A workflow is checked before it is published, so a structurally broken graph is refused rather than promoted. - **"Continue on error" is a per-step decision.** By default a failing agent step stops the run; switching it on lets the workflow carry on past that step, which is the right choice for an enrichment step and the wrong one for a step everything downstream depends on. - **Guardrails are a node, not a global setting.** Placing a guardrails node decides exactly where in the run the checks apply — the agent-level [Safety](/docs/os/agent-settings/safety) and [Privacy](/docs/os/agent-settings/privacy) panels remain the agent-wide controls. - **State is declared, not implied.** Values that travel between steps are declared on the **Start** node and written by **Set state** or **Transform**, so what a workflow carries is visible on the graph. - **The canvas auto-saves.** The header's unsaved-changes indicator is the reliable signal of whether the version on the server matches what is on screen. ## Building Workflows Into Your Own App The workflow pieces ship in the ibl.ai SDK — the node-type sidebar, the connector management dialog, and the create and delete modals — alongside the data-layer hooks for listing, reading, creating, patching, validating, publishing, and deleting workflows. The canvas and the node configuration panel are built in your own application on top of them, which is what allows a product to define its own node set and layout. Install the [iblai/vibe](https://github.com/iblai/vibe) skills; the reusable skill for this workflow is [`iblai-vibe-workflow`](https://github.com/iblai/vibe/tree/main/skills/iblai-vibe-workflow), and the SDK overview is at [Vibe SDK](/developer/platform/vibe-sdk). --- ## Agent Settings: Access URL: https://ibl.ai/docs/os/agent-settings/access # Agent Settings: Access ![Access control panel on the Integrations tab showing a Create role access button and a role table with an Editor role, its description, a user-count badge of 3, and a pencil edit action](/images/docs/os/agent-settings/agent_settings_access.webp) ## Overview The Access panel manages per-agent, role-based access control. Its header reads "Access control — Manage which users can view or edit this agent by role," and the intro banner explains: "Decide who can use this agent. Share it with specific people or teams, and control what each of them is allowed to do." Access is granted by creating a role policy on the agent and attaching users or groups to it. Each role appears as one row in the table, so the panel shows at a glance which roles exist on this agent and how many people hold each one. To reach this panel, open the **Edit Agent** modal, switch the tab group at the top of the sidebar from **Configurations** to **Integrations**, and select **Access**. The Integrations sidebar also lists Sandbox, Tools, MCP, Datasets, API, LTI, and Embed. ## Target Audience **Administrator** ## Settings Reference #### Create role access A button that opens a dialog for granting a role on this agent. In the dialog you pick a role, then attach people by searching the platform's users, entering usernames or email addresses manually, or selecting groups. The button is offered only for roles not yet assigned on the agent — each role has at most one policy. #### Available roles Three roles can be granted per agent: - **Editor** — "Editors can update agent configuration, prompts, and tools." - **Chat** — chat access limits users to conversations without editing capabilities. - **Analytics Viewer** — allows the user to view analytics data for this agent. #### Role table The table lists each existing role policy with four columns: **Role** (the role name, e.g. Editor), **Description** (what the role permits), **Users** (a badge with the number of users currently holding the role — 3 in the screenshot), and **Actions**. #### Edit action (pencil) The pencil icon in the Actions column opens the role's access panel, where you can add or remove individual users and groups on that role. Removing everyone from a role revokes that access entirely. ## How to Use #### Step 1: Open the Access panel Open the **Edit Agent** modal, click the **Integrations** tab above the sidebar, and select **Access**. #### Step 2: Create a role policy Click **Create role access**. In the dialog, choose the role to grant — Editor, Chat, or Analytics Viewer. #### Step 3: Add people or teams Search your platform's users by name, add usernames or email addresses manually, or select groups to grant the role to a whole team at once. Confirm to create the policy. #### Step 4: Review and adjust Back in the table, check the **Users** badge to confirm how many people hold each role. Click the pencil in the **Actions** column at any time to add or remove users and groups from a role. --- ## Agent Settings: Analytics URL: https://ibl.ai/docs/os/agent-settings/analytics # Agent Settings: Analytics ![Analytics panel in the Edit Agent modal showing a launcher grid of report cards — Overview, Users, Topics, Transcripts, Costs, Audit, and Data Reports — each with a short description and arrow](/images/docs/os/agent-settings/agent_settings_analytics.webp) ## Overview The Analytics panel is the launch point for every usage report available for an agent. The panel header reads: "Usage reports and insights for this agent," and the helper banner explains: "See how this agent is being used — who's chatting with it, what they talk about, what it costs, and more. Pick a report below to dive in." Rather than rendering charts inline, this panel presents seven report cards. Clicking a card opens the corresponding full analytics report for the agent, so administrators can move from a quick launcher to detailed dashboards covering engagement, users, topics, transcripts, cost, audit activity, and downloadable data exports. To reach this screen, open the **Edit Agent** modal, switch to the **Runtime** tab group (its sidebar lists Tasks, Memory, History, Audit, and Analytics), and select **Analytics**. Analytics is admin-gated: it is only available to users with permission to view the agent's analytics. ## Target Audience **Administrator** | **Agent Builder** ## Report Cards #### Overview "A high-level snapshot of usage and engagement over time." Opens the Overview report, which summarizes agent activity — metrics such as messages, active users, topics, and conversations — with charts and time filters. #### Users "See who's chatting with this agent and how active they are." Opens the Users report with user-level metrics, including active users, access times, and per-user details. #### Topics "The subjects people bring up most across conversations." Opens the Topics report, which surfaces the most common conversation subjects along with conversation and message counts. #### Transcripts "Read full conversation transcripts message by message." Opens the Transcripts report, where each conversation can be read in full, message by message. #### Costs "Track token usage and what this agent is costing you." Opens the cost report, which breaks down spend — for example per day, by provider, by LLM, and per user. #### Audit "Review the log of changes and activity for this agent." Opens the same audit trail that is available from the Audit panel in this tab group — the record of who changed what and when on this agent. #### Data Reports "Generate and download detailed reports to share or archive." Opens the Data Reports surface, where report files (such as user reports) can be generated, reviewed, edited in a CSV editor, and downloaded. ## How to Use #### Step 1: Open the Analytics panel In the **Edit Agent** modal, select the **Runtime** tab group, then click **Analytics** in the sidebar. The launcher grid of report cards appears. #### Step 2: Pick a report Click the card that matches your question — **Overview** for a general pulse, **Users** for who is active, **Topics** for what people ask about, **Transcripts** to read conversations, **Costs** for spend, **Audit** for change history, or **Data Reports** for downloadable exports. #### Step 3: Work inside the report Each report opens its own detailed view with filters and charts appropriate to that report. Use the report's own controls (such as time filters) to narrow the data. #### Step 4: Export when needed For shareable or archival output, use **Data Reports** to generate and download files rather than copying values out of the dashboards. --- ## API Keys URL: https://ibl.ai/docs/os/agent-settings/api # API Keys ![API panel listing secret API keys in a table with NAME, CREATED and EXPIRES columns, delete icons per row, and a Create New button](/images/docs/os/agent-settings/agent_settings_api.webp) ## Overview API keys are secret credentials that authenticate programmatic calls to the ibl.ai platform. Use them to call an agent from your own apps, build the platform into a product or workflow, or let scripts, backends, and integrations authenticate against the platform API on behalf of your organization. There is **one API-key backend**, and the same keys can be created and managed from **two places in the UI**. The keys, their permissions, and their behavior are identical regardless of where you generate them — the two panels are just different entry points into the same key store. Keys are secret: the panel warns, "Your secret API keys are listed below. Please note that we do not display your secret API keys again after you generate them." It adds: "Do not share your API key with others, or expose it in the browser or other client-side code. In order to protect the security of your account, IBL may also automatically rotate any API key that we've found has leaked publicly." ## Target Audience **Administrator** | **Developer** ## Where to Manage API Keys You can create, view, and revoke API keys from either UI — both operate on the same organization-level key list. #### From an agent (Integrations → API) Open the **Edit Agent** modal, switch the tab group at the top of the sidebar from **Configurations** to **Integrations**, and select **API**. The intro banner frames the use case: "Use this agent from your own apps. Create API keys here to call it programmatically and build it into your product or workflow." Keys are managed at the platform (organization) level, so the same key list serves programmatic access for the organization's agents. #### From organization settings (Integrations → APIs) ![Integrations APIs tab showing a generated API key with Name, Created, and Expires columns and an Add API button](/images/docs/os/organization-settings/organization_settings_integrations_apis.webp) Switch the top-bar toggle to **Admin**, open the settings dialog, choose **Integrations** in the left sidebar, and select the **APIs** tab (alongside LLMs and Data Sources). The banner reads: "These are authentication keys that you've generated for external applications to authenticate with your service. Keys are displayed only once when generated." Unlike the LLMs and Data Sources tabs — which store *outbound* credentials for third-party services — the APIs tab issues *inbound* credentials that external applications present to authenticate against the platform API. ## Settings Reference #### API key table A table listing existing keys with three data columns: **NAME** (the label given at creation, e.g. "MemoryTest", "api-test-1", "iblai"), **CREATED** (creation date, e.g. "July 17th, 2026"), and **EXPIRES** (expiry date, or "N/A" for keys with no expiration). Expired keys stop authenticating automatically. The key values themselves are never redisplayed after generation. Viewing the list requires the API-token list permission; without it the table reports "You do not have permission to view API keys." #### Create key ("Create New" / "Add API") Both panels open the same key-creation dialog — labeled **Create New** in the agent panel and **Add API** in organization settings. It has a required **Name** (use distinct names per consuming application so keys can be rotated independently) and an optional **Expiration Date** from a calendar picker. Leaving the date empty creates a non-expiring key. On creation, the full secret key is displayed once in a dialog so you can copy it — store it securely, because it cannot be retrieved again. #### Delete (trash icon) Each row ends with a trash button that opens a delete-confirmation dialog ("Are you sure you want to delete the API Key with the name …? This action cannot be undone."). Deleting a key immediately invalidates it for any integration still using it. The action is shown only to users with the API-token create/manage permission. ## How to Use #### Step 1: Open an API panel Either open the **Edit Agent** modal → **Integrations** tab → **API**, or switch to **Admin**, open the settings dialog → **Integrations** → **APIs** tab. Both reach the same key list. #### Step 2: Create a key Click **Create New** (agent panel) or **Add API** (organization settings), give the key a descriptive name — for example, the app or workflow that will use it — optionally set an expiration date, and confirm. #### Step 3: Copy and store the secret Copy the generated key from the one-time display dialog and store it in a secrets manager or environment variable. It will not be shown again. #### Step 4: Authenticate your app Use the key server-side to authenticate programmatic calls to the platform API or a specific agent. Never embed it in browser or other client-side code. #### Step 5: Rotate and clean up Review the table's **EXPIRES** column periodically. To rotate without downtime, create a replacement key before deleting the old one. Delete keys you no longer use with the trash icon, and replace any key you suspect has leaked. --- ## Agent Settings: Audit URL: https://ibl.ai/docs/os/agent-settings/audit # Agent Settings: Audit ![Audit panel in the Edit Agent modal with user search, date range, and action filters above a table of audit entries listing user, action description, and relative time](/images/docs/os/agent-settings/agent_settings_audit.webp) ## Overview The Audit panel is the change log for an agent: it records who changed what and when. The panel header reads: "View who changed what and when for this agent," and the helper banner explains: "Keep a paper trail. Review the log of who changed what and when for this agent — handy for troubleshooting and staying compliant." Each entry captures the user who made a change (their email), a description of the action — for example "Updated LLM model, LLM provider" or "Enabled tools" on the agent, including the agent's name and unique ID — and a relative timestamp such as "14 days ago." This makes it possible to trace a behavior change (a different model, a new voice, newly enabled tools) back to the person and moment it happened. To reach this screen, open the **Edit Agent** modal, switch to the **Runtime** tab group (its sidebar lists Tasks, Memory, History, Audit, and Analytics), and select **Audit**. The same audit trail is also reachable from the Analytics area. Audit is admin-gated: users without audit-log permission do not see this tab. ## Target Audience **Administrator** ## Panel Reference #### Search for User A searchable dropdown that filters the audit table to entries made by a specific user. Use it to review one administrator's changes in isolation. #### Pick a Date Range A calendar filter that limits the table to audit entries within a chosen date range — useful for narrowing down when a configuration change occurred. #### All Actions A dropdown that filters entries by action type, defaulting to **All Actions**. Selecting a specific action type shows only entries of that kind. #### Audit table The log itself, with three columns: - **USER** — the email address of the account that made the change. This column can be empty for entries where no user is attributed. - **ACTION** — a plain-language description of what changed, naming the fields (for example "Updated created by, LLM temperature", "Updated LLM model, LLM provider", "Enabled tools", "Updated openai voice, voice provider") together with the agent's name and unique identifier. - **TIME** — a relative timestamp for the change, such as "13 days ago" or "21 days ago." Entries are listed most recent first. ## How to Use #### Step 1: Open the Audit panel In the **Edit Agent** modal, select the **Runtime** tab group, then click **Audit** in the sidebar. The audit table loads with the most recent changes at the top. #### Step 2: Narrow the log Use **Search for User** to focus on one person's changes, **Pick a Date Range** to bound the time window, or the **All Actions** dropdown to isolate a particular kind of change. #### Step 3: Trace a change Read the **ACTION** column to see exactly which fields were updated and on which agent (the entry includes the agent's unique ID). Combine this with the **USER** and **TIME** columns to establish who made the change and when. #### Step 4: Use it for compliance and troubleshooting When agent behavior shifts unexpectedly — different answers, a new voice, changed temperature — check the audit trail first: the entry that mentions the relevant field (LLM model, tools, voice provider, and so on) identifies the responsible change. --- ## Agent Settings: Basic URL: https://ibl.ai/docs/os/agent-settings/basic # Agent Settings: Basic ![Settings panel on the Basic sub-tab showing Name, Unique ID, Description, and Category fields, an Image uploader, and Save, Copy, and Delete buttons](/images/docs/os/agent-settings/agent_settings_basic.webp) ## Overview The Basic sub-tab of the Settings panel holds an agent's identity: its name, unique ID, description, category, and avatar image. The panel header reads: "Configure your agent's basic settings and preferences." These fields determine how the agent appears in listings and in the chat interface. Basic is the first of three sub-tabs at the top of the Settings panel — **Basic**, **Discovery**, and **Capabilities**. All three share one form, so **Save** submits changes from every sub-tab at once. To reach this screen, open the **Edit Agent** modal, stay on the **Configurations** tab group (alongside **Integrations** and **Runtime**), select **Settings** in the left sidebar, and make sure the **Basic** sub-tab is active. ## Target Audience **Administrator** | **Agent Builder** ## Settings Reference #### Name (required) The agent's display name (for example, "agentAI"). This is the name users see when browsing and chatting with the agent. The form will not submit without it — the validation message is "Agent name is required." #### Unique ID A read-only UUID that identifies the agent across the platform (for example, `2be9219f-1e6b-43f9-b8c1-f2fab4076892`). Use the copy button next to the field to copy it to the clipboard — a "Unique ID copied to clipboard" confirmation appears. The unique ID is what API calls, embeds, and integrations use to reference this agent. #### Description (required) A short summary of what the agent does and how it behaves (for example, "Upbeat, encouraging tutor helping students understand concepts by explaining ideas and asking questions."). The description is shown on the agent's card in listings. Validation message: "Agent description is required." #### Category (required) A dropdown that files the agent under one of the organization's agent categories (the screenshot shows "Learning"). The category list is loaded from the platform, and the picker is searchable — it shows "Search category..." and reports "No Category found." when nothing matches. Categories drive how agents are grouped on explore/listing pages. #### Image The agent's avatar. Use **+ Upload** to add an image file, and the **X** button over the current image to remove it. The image appears wherever the agent is listed and in chat. #### Save, Copy, Delete **Save** persists the whole Settings form (all three sub-tabs). **Copy** opens a dialog to duplicate the agent; it appears when the agent allows copies (the "Enable copies" capability). **Delete** opens a confirmation dialog to permanently remove the agent; it appears only for users with delete permission. ## How to Use #### Step 1: Open the Basic sub-tab Open your agent's **Edit Agent** modal, keep **Configurations** selected, click **Settings** in the sidebar. The **Basic** sub-tab is selected by default. #### Step 2: Name and describe the agent Enter a **Name** and a **Description**. Both are required. Write the description as the one-liner you want users to see on the agent's card. #### Step 3: Pick a category Choose a **Category** from the dropdown so the agent is grouped correctly in listings. Type in the picker to search when the list is long. #### Step 4: Add an image Click **+ Upload** under **Image** and choose an avatar file. To replace it, remove the current image with the **X** button first. #### Step 5: Save Click **Save**. A success message confirms the agent was updated. If you need the agent's UUID for an API call or embed, copy it from the **Unique ID** field. --- ## Agent Settings: Billing URL: https://ibl.ai/docs/os/agent-settings/billing # Agent Settings: Billing ![Billing panel on the This Agent sub-tab, showing the enable toggle, the monthly usage strip with spent, percent used, and remaining figures, the spend limit field, the reset interval selector, the enforcement mode, and the alert threshold field](/images/docs/os/agent-settings/agent_settings_billing.webp) ## Overview The Billing panel is where you put a ceiling on what an agent is allowed to spend on LLM calls. The panel header reads "Billing" with the subtitle "Set spend limits for this agent and its users, and see how much has been used." Two sub-tabs match the two agent-level scopes the platform enforces. **This Agent** holds the agent's own cap — everything anyone spends talking to this agent counts against it. **Per User** holds explicit per-person caps on this same agent, so one heavy user can be limited without lowering the ceiling for everyone else. Enforcement is server-side, not advisory. When a cap set to **Block Requests** is exceeded, new chat and training requests are refused until the period resets. Alongside these two sits a third, workspace-wide scope on the organization's [Billing](/docs/os/organization-settings/billing) surface; when several caps apply, the tightest one governs. To reach this screen, open the **Edit Agent** modal and select **Billing** in the left sidebar. Each sub-tab is permission-gated on its own endpoints, so a user without access to a scope sees a "no access" notice in place of that sub-tab's contents rather than an error. ## Target Audience **Administrator** | **Finance / Operations** | **Agent Builder** ## Panel Reference #### This Agent / Per User sub-tabs The two agent-level scopes. **This Agent** edits the agent's single cap; **Per User** manages a list of caps that apply to named people on this agent. The panel ratchets its height as you switch, so moving between sub-tabs never shrinks the dialog underneath it. #### Enable toggle The capability gate on a cap — "Put a ceiling on AI spend." While it is on, everything the limit covers counts toward the amount; the fields collapse when it is switched off, and the flag is saved with the rest of the form. #### Usage strip On a cap that has been saved, a "Daily / Weekly / Monthly / Yearly Usage" strip sits above the fields with a progress bar and three figures: **Spent**, **% of limit used**, and **Remaining**. The bar is blue in normal use, amber from 80% of the limit, and red once the limit is passed, and it carries **Disabled**, **Alert only**, or **Exceeded** badges where they apply. Until a cap exists the panel reads "No spend limit configured yet — set an amount and save to create one." #### Spend Limit (USD) The ceiling itself, as a positive dollar amount. #### Resets Every The period the ceiling covers — **Day**, **Week**, **Month**, or **Year**. Spend accumulates within the period and starts again from zero when it rolls over. #### When the Limit Is Reached The enforcement mode. **Block Requests** refuses new chat and training requests until the period resets; **Alert Only** lets requests continue and alerts administrators instead. This is the single most consequential field on the panel — it decides whether a limit is a hard stop or a warning. #### Alert At (% of Limit) Comma-separated percentages, `80, 95` by default, at which administrators receive a near-limit alert. These fire under either enforcement mode. #### Save and Delete Limit **Save** creates the cap on the first save and updates it thereafter. **Delete Limit** appears once a cap exists and asks for confirmation before removing it. #### Per User table ![Billing panel on the Per User sub-tab, showing the Add User Limit button and a table of per-user caps with User, Limit, and Status columns](/images/docs/os/agent-settings/agent_settings_billing_per_user.webp) Each row is one person's cap on this agent: the **User** (shown by email, and clickable through to the same profile viewer the Management area uses), the **Limit** written as amount and period (`$2.00 / Week`), and a **Status** column whose toggle saves immediately, along with **Exceeded** and **Alert-only** badges where they apply. #### Row actions menu ![Per-user row actions menu offering Edit and Delete](/images/docs/os/agent-settings/agent_settings_billing_actions.webp) The per-row menu offers **Edit** — which opens the same spend-cap form for that person — and **Delete**, which confirms against the user's email before removing the cap. #### Add User Limit ![New User Limit modal with the platform-user search followed by the spend-cap fields](/images/docs/os/agent-settings/agent_settings_billing_new_user_limit.webp) Opens the **New User Limit** modal. Pick the person through the platform-user search — it needs at least two characters and offers only real accounts, so a limit can never be attached to a mistyped name — then fill in the same fields as the agent's own cap. #### Edit User Limit ![Edit User Limit modal pre-filled with an existing per-user cap](/images/docs/os/agent-settings/agent_settings_billing_edit_user_limit.webp) Editing skips the picker and opens the form directly on the existing cap, since the person it belongs to is already settled. ## How to Use #### Step 1: Open the Billing panel In the **Edit Agent** modal, select **Billing** in the left sidebar. It opens on **This Agent**. #### Step 2: Set the agent's own ceiling Switch the enable toggle on, enter a **Spend Limit (USD)**, and choose how often it **resets**. A brand-new agent has no cap yet, so the panel shows the "no spend limit configured" state until your first save. #### Step 3: Decide whether the limit stops work or warns Under **When the Limit Is Reached**, choose **Block Requests** for a hard ceiling — a runaway agent stops costing money — or **Alert Only** where interrupting the work would be worse than the overspend. #### Step 4: Set the alert thresholds Leave the default `80, 95`, or enter your own percentages. These are what give an administrator time to act before a hard block lands. #### Step 5: Save, then watch the usage strip Save to create the cap. From then on the panel shows spend against the limit every time you open it, and the bar turns amber at 80% and red once the limit is passed. #### Step 6: Limit individual users where needed Switch to **Per User**, click **Add User Limit**, search for the person, and give them their own amount, period, and enforcement mode. Their spend still counts toward the agent's cap — a per-user limit narrows one person's share, it does not exempt them. ## Behavior Notes - **The tightest cap governs.** Three scopes exist: the workspace-wide limit on the organization's Billing surface, this agent's limit, and a per-user limit on this agent. A request has to clear all of the ones that apply, so the strictest is the one that decides. - **Enforcement really is server-side.** With **Block Requests**, an exceeded cap makes chat and training requests fail with an HTTP `429` whose body carries the error code `spend_cap_exceeded` — a distinct code, so a spend block can be told apart from a genuine provider rate limit. - **An empty first run is normal.** Until a cap is saved there is no record to read, and the panel treats that as its first-run state rather than an error. The first save creates it. - **Usage figures are read-only.** Spend, remaining, and exceeded status are all reconciled on the server and only displayed. What you set is the amount, the period, the enforcement mode, the alert thresholds, and whether the cap is enabled. - **Toggling status saves immediately.** The **Status** switch in the Per User table writes straight away, without opening the form — it re-submits the cap with the enabled flag flipped. - **Caps are keyed by account, displayed by email.** The API identifies a per-user cap by username, while the panel deliberately shows the email everywhere, which is why the user is chosen from a search rather than typed in. - **Each scope is permission-gated separately.** A role may be allowed to see the agent's own cap but not the per-user list, or the reverse; the sub-tab you cannot see is replaced by a no-access notice rather than hidden. ## Building Spend Limits Into Your Own App The Billing panel is one of the agent-settings tabs published in the ibl.ai SDK, so the same limits can be managed from a product you build yourself. Install the [iblai/vibe](https://github.com/iblai/vibe) skills and mount `<AgentSpendCapsTab>` from `@iblai/iblai-js/web-containers/next` inside an `AgentSettingsProvider`; every label is overridable through a `labels` prop. For chat surfaces there is also `SpendCapUsage`, a learner-safe indicator that renders progress zones and percentages but never dollar amounts, warns as a user nears a limit, and shows a blocked banner once a hard cap is exceeded. The reusable skill for this workflow is [`iblai-vibe-agent-billing`](https://github.com/iblai/vibe/tree/main/skills/iblai-vibe-agent-billing), and the SDK overview is at [Vibe SDK](/developer/platform/vibe-sdk). --- ## Agent Settings: Capabilities URL: https://ibl.ai/docs/os/agent-settings/capabilities # Agent Settings: Capabilities ![Settings panel on the Capabilities sub-tab with toggle groups for Chat Experience, Voice & Calls, and Advanced, including file attachments, verbose reasoning, document retrieval, prompt caching, voice recordings, private mode, and copies](/images/docs/os/agent-settings/agent_settings_capabilities.webp) ## Overview The Capabilities sub-tab of the Settings panel switches individual agent abilities on or off. The panel header reads: "Configure your agent's basic settings and preferences." Toggles are grouped into three sections — **Chat Experience**, **Voice & Calls**, and **Advanced**. Capabilities is the third sub-tab at the top of the Settings panel, after **Basic** and **Discovery**. All three sub-tabs share one form, so **Save** submits everything at once. Some toggles are permission- or organization-gated, so the exact set you see can vary (for example, the private-mode toggle only appears when the organization allows chat-privacy control). To reach this screen, open the **Edit Agent** modal, stay on the **Configurations** tab group, select **Settings** in the left sidebar, then click the **Capabilities** sub-tab. ## Target Audience **Administrator** | **Agent Builder** ## Settings Reference ### Chat Experience #### Enable file attachments Tooltip: "Lets users attach files in the chat." When on, the chat interface shows file-attachment options so users can upload files into the conversation. Shown on in the screenshot. #### Enable verbose reasoning Tooltip: "Show the agent's reasoning steps while it responds." When on, the chat displays the agent's intermediate reasoning while the reply streams, instead of only the final answer. Shown on in the screenshot. #### Enhanced document retrieval Tooltip: "Runs several search queries per question to pull more relevant documents — more thorough answers, slightly slower." This is multi-query retrieval over the agent's knowledge base: each user question is expanded into multiple search queries so relevant material is less likely to be missed. Shown on in the screenshot. #### Enable prompt caching Tooltip: "Caches large or long system prompts so they are reused across requests, reducing LLM cost and latency. By default this is disabled." Turn this on for agents with long system prompts to cut cost and speed up responses. Shown off in the screenshot. ### Voice & Calls #### Enable voice recordings Tooltip: "Lets users send voice recordings in the chat." When on, the chat interface shows voice-recording options. Shown on in the screenshot. #### Smart document retrieval Tooltip: "On a call, the agent fetches documents only when it needs them instead of on every turn — faster replies. The knowledge base stays available either way." This voice-call optimization uses function calling for retrieval, so knowledge-base lookups happen on demand during calls. Shown off in the screenshot. ### Advanced #### Enable private mode Tooltip: "When on, every conversation with this agent runs in private mode — no chat history or memory is stored for any user. Use this for sensitive or compliance-bound deployments." This is an agent-level kill switch for chat history; the row only appears when the organization allows chat-privacy control. Shown off in the screenshot. #### Enable copies Tooltip: "Lets other admins make their own copy of this agent." When on, the agent is copyable and other administrators can duplicate it (the **Copy** button on this panel also depends on it). Shown on in the screenshot. #### Other capability toggles Depending on organization configuration and your permissions, this sub-tab can also expose additional toggles, including **Remember past conversations** (lets the agent store and reference memory from earlier chats), **Enable voice calls** (voice-call options in chat), and **Enable screen sharing** (screen share during calls). The agent's dedicated sandbox is **not** configured here. It is chosen on the [Sandbox](sandbox.md) tab, which offers three mutually exclusive sandbox kinds and always has one of them active. #### Save, Copy, Delete **Save** persists the whole Settings form (all three sub-tabs). **Copy** duplicates the agent (available when copies are enabled). **Delete** removes the agent after confirmation and appears only for users with delete permission. ## How to Use #### Step 1: Open the Capabilities sub-tab Open the **Edit Agent** modal, keep **Configurations** selected, click **Settings** in the sidebar, then choose the **Capabilities** sub-tab. #### Step 2: Configure the chat experience Decide whether users can attach files, whether the agent shows its reasoning, and whether retrieval should run in enhanced multi-query mode. Turn on **Enable prompt caching** if the agent's system prompt is long and you want lower cost and latency. #### Step 3: Configure voice behavior Turn on **Enable voice recordings** if users should be able to send voice messages, and **Smart document retrieval** if voice calls should fetch documents on demand for faster replies. #### Step 4: Set advanced options Turn on **Enable private mode** for compliance-sensitive deployments where no chat history or memory should ever be stored. Use **Enable copies** to let other admins clone the agent. #### Step 5: Save Click **Save** to apply all capability changes. --- ## Agent Settings: Datasets URL: https://ibl.ai/docs/os/agent-settings/datasets # Agent Settings: Datasets ![Datasets panel with a search box, Add Resource button, and a table listing coursecreator-userguide.pdf with type FILE, 58129 tokens, interval, visibility, and status columns](/images/docs/os/agent-settings/agent_settings_datasets.webp) ## Overview The Datasets panel manages the knowledge sources an agent is trained on. The panel header reads: "Manage training datasets and knowledge sources," and the helper text explains: "Teach your agent with your own material. Upload documents, files, or links and it'll answer from them — grounded in your content instead of guessing." Every uploaded resource becomes a row in the datasets table with its name, type, token count, retraining interval, visibility, and training status. The screenshot shows one trained resource: `coursecreator-userguide.pdf` (type FILE, 58,129 tokens, training toggled on). To reach this screen, open the **Edit Agent** modal, switch to the **Integrations** tab group, and select **Datasets** in the left sidebar. ## Target Audience **Administrator** | **Agent Builder** ## Panel Reference #### Search datasets Filters the table by resource name as you type. #### Add Resource Opens the **Add Resources** modal ("Add knowledge to help your agent provide more relevant insights. Others with edit access can reuse these sources for more topics."). Supported resource types include file uploads (PDF, DOCX, PowerPoint, Excel, CSV, TXT, Markdown, ZIP, Audio, Video, Image), links and crawls (URL, Web Crawler, YouTube), cloud sources (Google Drive, Microsoft OneDrive, Dropbox, GitHub), and platform Courses. #### NAME column The resource's document name (or URL), rendered as a link that opens the underlying source in a new tab. #### TYPE column The resource's document type in uppercase — for example FILE, PDF, or URL. #### TOKENS column The number of tokens the resource contributed to the agent's knowledge base — a measure of how much content was ingested (58,129 for the user guide in the screenshot). #### INTERVAL column A clock button that opens the **Schedule Retraining** dialog for the resource. Presets are **Daily (1 day)**, **Weekly (7 days)**, and **Monthly (30 days)**, plus a custom interval in days; the dialog confirms "Dataset will retrain every {days} days." Retraining re-ingests the source on that schedule so the agent stays current — useful for URLs and crawled sites. Resources that cannot be retrained show a "This document cannot be retrained" tooltip and the button is disabled. #### VISIBILITY column An eye button toggling the resource between private (eye-off icon, as in the screenshot) and public access. The actions are labeled "Make public" and "Make private" — public resources can be reused by others with edit access. #### STATUS column A switch controlling whether the resource is trained into the agent's knowledge base. Toggled on (as in the screenshot), the content is active; while training runs, the row reports an "In Progress" state. Toggling off untrains the document, and the panel then offers to keep or delete it. ## How to Use #### Step 1: Open the Datasets panel Open the **Edit Agent** modal, click the **Integrations** tab group, then select **Datasets**. #### Step 2: Add a resource Click **Add Resource**, pick the resource type (file upload, URL, web crawl, cloud drive, GitHub, YouTube, or a platform course), and provide the file or link. The resource is ingested and appears in the table with its token count. #### Step 3: Verify training status Check the **STATUS** switch is on so the resource is part of the agent's knowledge base. Watch for the "In Progress" state to finish after ingestion. #### Step 4: Schedule retraining (optional) For sources that change over time, click the clock icon in **INTERVAL** and choose Daily, Weekly, Monthly, or a custom number of days. #### Step 5: Control visibility Use the eye icon to make a resource public (reusable by others with edit access) or keep it private to this context. --- ## Agent Settings: Disclaimers URL: https://ibl.ai/docs/os/agent-settings/disclaimers # Agent Settings: Disclaimers ![Disclaimers panel showing a User Agreement card toggled Active with default terms text, and an Advisory card reading "AI is capable of making mistakes. Please review all responses.", each with Edit and Copy buttons](/images/docs/os/agent-settings/agent_settings_disclaimers.webp) ## Overview The Disclaimers panel manages the notices an agent shows its users. The header reads "Configure disclaimer settings for your agent," and the intro banner explains: "Show your users the fine print. Add notices — like 'This is an AI assistant' or a compliance statement — that appear in the chat so people know what to expect." Two notices are configured here. The **User Agreement** is a terms-of-use statement users must be shown for this agent, stored as a disclaimer record scoped to the agent with its own active state. The **Advisory** is a short caution rendered in the chat interface — by default, "AI is capable of making mistakes. Please review all responses." To reach this panel, open the **Edit Agent** modal, stay on the **Configurations** tab group, and select **Disclaimers** in the left sidebar. ## Target Audience **Administrator** | **Agent Builder** ## Settings Reference #### User Agreement A card holding the agreement text shown to users of this agent; the info tooltip says it "Controls User Agreement." An **Active/Inactive** toggle in the card header turns the agreement on or off, saving immediately. The default content begins: "By accessing and using the ibl.ai platform ("Platform"), you agree to the following terms. The Platform provides AI-powered mentorship and educational support. You understand that AI responses may contain inaccuracies, and you are responsible for independently verifying any information before relying on it for academic, professional, or personal decisions. Do not input confidential, sensitive, or personally identifiable information of yourself or others." The card is visible to users whose role grants the view-disclaimers permission on the agent. #### Advisory A card holding the short advisory notice for the agent; the info tooltip says it "Controls Advisory." The default text is "AI is capable of making mistakes. Please review all responses." The advisory content is stored on the agent's settings as its disclaimer text. #### Edit Each card has an **Edit** button that opens an editor modal for that notice — one for the User Agreement content and one for the Advisory text. Saving the editor persists the new text for this agent. #### Copy Each card's **Copy** button copies the current notice text to the clipboard, useful for reusing the same wording across agents. ## How to Use #### Step 1: Open the Disclaimers panel Open the **Edit Agent** modal, keep **Configurations** selected, and click **Disclaimers** in the sidebar. #### Step 2: Review the defaults Read the default User Agreement and Advisory text in each card and decide whether they fit your deployment, brand, and compliance requirements. #### Step 3: Edit the notices Click **Edit** on the User Agreement card to open its editor and replace or amend the terms — for example, adding an organization-specific compliance statement. Do the same on the Advisory card to change the in-chat caution. #### Step 4: Activate the User Agreement Use the **Active/Inactive** toggle on the User Agreement card to control whether the agreement is enforced for this agent. The change saves immediately. --- ## Agent Settings: Discovery URL: https://ibl.ai/docs/os/agent-settings/discovery # Agent Settings: Discovery ![Settings panel on the Discovery sub-tab with Who Can View and Who Can Chat dropdowns, a Highlight in featured listings toggle, and Save, Copy, and Delete buttons](/images/docs/os/agent-settings/agent_settings_discovery.webp) ## Overview The Discovery sub-tab of the Settings panel controls who can find and use an agent, and whether it gets promoted in listings. The panel header reads: "Configure your agent's basic settings and preferences," and Discovery sits between the **Basic** and **Capabilities** sub-tabs at the top of the panel. Its two required dropdowns separate visibility from usage: **Who Can View?** decides who sees the agent, while **Who Can Chat?** decides whether unauthenticated visitors may start conversations. A **Highlight in featured listings** toggle additionally promotes the agent in featured placements. To reach this screen, open the **Edit Agent** modal, stay on the **Configurations** tab group, select **Settings** in the left sidebar, then click the **Discovery** sub-tab. ## Target Audience **Administrator** | **Agent Builder** ## Settings Reference #### Who Can View? (required) A dropdown controlling who can see this agent; its tooltip reads "Control who can view this agent." The visibility levels defined for agents are administrator-only, platform users/students, and anyone — i.e. you can restrict the agent to organization administrators, open it to the organization's authenticated users (the "Users" value shown selected in the screenshot), or make it viewable by anyone. #### Who Can Chat? (required) A dropdown controlling who can start conversations with the agent; its tooltip reads "Control who can chat with this agent." The two options are **Anyone** (anonymous chat allowed) and **Authenticated Users** (shown selected — visitors must be signed in to chat). #### Highlight in featured listings A toggle whose tooltip reads: "Feature this agent to highlight it in listings." When on, the agent is marked as featured so it is surfaced prominently in agent listings. It is off in the screenshot. #### Allow LTI launches The Discovery sub-tab also defines an **Allow LTI launches** toggle (permission-gated, so it does not appear for every user). Its tooltip warns: "Allows this agent to be accessible via LTI launches. Unselecting this will immediately remove access for any users that have launched this via LTI." #### Save, Copy, Delete **Save** persists the Discovery form changes to the agent. **Copy** opens a dialog to duplicate the agent. **Delete** opens a confirmation dialog to delete the agent; it appears only for users with delete permission. ## How to Use #### Step 1: Open the Discovery sub-tab Open the **Edit Agent** modal, keep **Configurations** selected, click **Settings** in the sidebar, then choose the **Discovery** sub-tab (between Basic and Capabilities). #### Step 2: Set who can view Pick a value in **Who Can View?** — restrict the agent to administrators while it is being built, open it to your organization's users, or make it visible to anyone when it is ready for broad discovery. #### Step 3: Set who can chat Pick **Authenticated Users** to require sign-in before chatting, or **Anyone** to allow anonymous conversations (for example, on a public-facing help agent). #### Step 4: Optionally feature the agent Turn on **Highlight in featured listings** if the agent should be promoted in featured placements. #### Step 5: Save Click **Save** to apply the changes. Use **Copy** if you want a duplicate of the agent to experiment with, or **Delete** to remove the agent entirely. --- ## Agent Settings: Embed URL: https://ibl.ai/docs/os/agent-settings/embed # Agent Settings: Embed ![Embed panel with Advanced CSS and Advanced JavaScript sections, Icon Selection, Mode Selection, Starter Prompts and Who Can View controls beside a live chat-widget preview, and a Create Embed button](/images/docs/os/agent-settings/agent_settings_embed.webp) ## Overview The Embed panel packages an agent as a chat widget for your own website or application. The header reads "Configure embedding options for your agent," and the intro banner summarizes the workflow: "Put this agent on your site or app. Copy the embed snippet and tweak how the chat widget looks and behaves for your users." The left side of the panel holds the widget configuration — styling, scripting, icon, mode, starter prompts, and access controls — while the right side shows a live preview of the chat widget, including the agent's avatar, name, and its starter prompt suggestions. Clicking **Create Embed** generates the embed code for the current configuration. To reach this panel, open the **Edit Agent** modal, switch the tab group at the top of the sidebar from **Configurations** to **Integrations**, and select **Embed**. ## Target Audience **Administrator** | **Agent Builder** ## Settings Reference #### Advanced CSS A collapsible section for custom CSS applied to the embedded widget, letting you restyle it to match your site. The CSS is saved to the agent with its own Save action inside the section. #### Advanced JavaScript A collapsible section for custom JavaScript attached to the embed, for advanced behavior customization. Like the CSS section, it saves its script to the agent independently. #### Icon Selection A dropdown choosing the widget's floating launcher icon: **Default** or **Custom**. Choosing Custom reveals an **Icon Editor** and a **Live Preview** of the floating chat bubble, where you can configure its image, position (corner), colors, border, padding, text, and sizing. #### Mode Selection A dropdown choosing the widget chat mode: **Default** or **Advanced**. #### Starter Prompts A dropdown choosing which starter prompts the widget displays before the first message; the tooltip reads "Choose the type of starter prompts to display." Options are **Guided Prompts** (shown selected — the guided suggestions visible in the preview pane) and **Suggested Prompts**. #### Who Can View? The same agent visibility control found on the Settings → Discovery sub-tab, surfaced here because it governs whether embed viewers can see the agent; the tooltip reads "Control who can view this agent." A **Who Can Chat?** control (Anyone vs. Authenticated Users) follows it further down the form. #### Widget preview The right-hand pane renders the widget as end users will see it — header with the agent's avatar and name, plus the starter prompt buttons (in the screenshot: "What type of course do you want to create?", "Can you help me outline the syllabus?", "What topics should I include in my course?", "How long should each course session be?"). #### Create Embed The primary button at the bottom-right. It submits the configuration (showing "Generating Embed" while it works) and then opens an **Embedded Code** dialog containing the generated snippet with a copy control, ready to paste into your site or app. ## How to Use #### Step 1: Open the Embed panel Open the **Edit Agent** modal, click the **Integrations** tab above the sidebar, and select **Embed**. #### Step 2: Configure the widget Pick the **Icon Selection**, **Mode Selection**, and **Starter Prompts** options, and set **Who Can View?** (and Who Can Chat?) for embedded visitors. Watch the right-hand preview update to confirm the widget looks right. #### Step 3: Optionally add CSS or JavaScript Expand **Advanced CSS** or **Advanced JavaScript** to restyle the widget or attach custom behavior, and save each section. #### Step 4: Generate the embed code Click **Create Embed**. When the **Embedded Code** dialog appears, copy the snippet. #### Step 5: Install on your site Paste the snippet into your website or application where the widget should load. --- ## Agent Settings: Evals URL: https://ibl.ai/docs/os/agent-settings/evals # Agent Settings: Evals ![Evals panel in the Edit Agent modal showing the benchmark selector, Manage benchmarks and New Evaluation buttons, and a table of evaluation runs with Status, Initiated By, Created, and Actions columns](/images/docs/os/agent-settings/agent_settings_evals.webp) ## Overview The Evals panel measures how well an agent performs by running it against a **benchmark** — a set of test questions — and scoring every response, so you can catch weak spots and track improvements as you refine the agent. The panel header reads: "Run this agent against a benchmark and score the responses," and the helper banner explains: "Measure how well your agent performs. Run it against a benchmark — a set of test questions — and every response gets scored, so you can catch weak spots and track improvements as you refine the agent." A benchmark is a graded test set: each item pairs an **input** (the question) with an optional **expected output** (the answer you want). These evaluation benchmarks are separate from an agent's [Datasets](datasets.md) — Datasets are the RAG documents that ground the agent's answers, while benchmarks are the test cases used to grade them. Benchmark items can be authored directly, uploaded from a CSV, or seeded from existing chat traces so real conversations become test cases. Running an evaluation is asynchronous: it dispatches a background job that sends every benchmark question to the agent and records each response as a **trace**. A run moves through `pending → in progress → completed`, and must reach **Completed** before it can be reviewed or exported. To reach this screen, open the **Edit Agent** modal, go to the **Analytics** tab, and select **Evals** from its sidebar (alongside Memory, History, and Audit). Evals is admin-gated: it is only available to users with permission to view the agent's analytics. Evaluation data is scoped to your organization and isolated — no other organization can read your benchmarks, runs, or scores. ## Target Audience **Administrator** | **Agent Builder** ## Running an Evaluation The panel lists every evaluation run for the agent in a table with **Evaluation**, **Status**, **Initiated By**, **Created**, and **Actions** columns. Above the table, a benchmark selector chooses which test set to run, **Manage benchmarks** opens benchmark authoring, and **New Evaluation** starts a run of the selected benchmark against the current agent. Each row's **Actions** menu (`⋯`) exposes: ![Actions menu open on an evaluation run, listing View results, New review, Check status, Export CSV, and Delete](/images/docs/os/agent-settings/agent_settings_evals_actions.webp) #### View results Opens the run detail — every trace with its input, expected output, actual output, and any scores. #### New review Starts an LLM-as-Judge review of the run (see below). #### Check status Polls the background task's current state (`pending`, `in progress`, `completed`, or `failed`). #### Export CSV Downloads the run's results as a spreadsheet — one row per item with `item_id`, `input`, `expected_output`, `actual_output`, `trace_id`, and one column per score. #### Delete Removes the run. This is destructive and is confirmed before it proceeds. ![Delete evaluation confirmation modal warning that the run cannot be recovered](/images/docs/os/agent-settings/agent_settings_evals_delete.webp) **View results**, **New review**, and **Export CSV** stay disabled until the run reaches **Completed**. The status badge is colored by state — green for COMPLETED, red for FAILED, blue for anything still in flight — and **Check status** refreshes a single row without reloading the table. ## Managing Benchmarks **Manage benchmarks** opens the benchmark library. Benchmarks are **organization-wide**, not tied to one agent — the same test set can be run against several agents, which is what makes it possible to compare them on equal footing. The dialog lists every benchmark with a search box and a **New Benchmark** action that takes a name and a description. ![Manage benchmarks dialog listing the organization's benchmarks with a search box and a New Benchmark button](/images/docs/os/agent-settings/agent_settings_evals_manage_benchmarks.webp) ![New Benchmark dialog with name and description fields](/images/docs/os/agent-settings/agent_settings_evals_new_benchmark.webp) Opening a benchmark shows its **Q&A items** — the question/answer pairs the agent is tested against. Each item pairs an input with an optional expected output. ![Benchmark items view listing the question and answer pairs in a benchmark, with an Add Q&A button](/images/docs/os/agent-settings/agent_settings_evals_benchmark_items.webp) **Add Q&A** offers two paths: #### Manual entry Type the question and, optionally, the expected answer directly into the form — the quickest way to add a handful of cases. ![Add Q&A dialog on the manual tab, with fields for the question and its expected output](/images/docs/os/agent-settings/agent_settings_evals_add_qa_manual.webp) #### CSV upload Upload a UTF-8 CSV with a required `input` column and an optional `expected_output` column, up to 10 MB or 10,000 rows. Rows with a blank question are skipped. ![Add Q&A dialog on the CSV tab, showing the file upload area and the required column format](/images/docs/os/agent-settings/agent_settings_evals_add_qa_csv.webp) The benchmark selector picks the first available benchmark automatically, and **New Evaluation** stays disabled until at least one benchmark exists — so creating a benchmark is the first step on a new agent. ## Reviews (LLM-as-Judge) ![Evaluation run detail showing raza-eval-2 marked Completed, 3 traces produced, a Reviews section with a completed accuracy review scored by gpt-5, and the benchmark items listed with their score counts](/images/docs/os/agent-settings/agent_settings_evals_experiment.webp) Opening a completed run shows its header — benchmark name, when it started, and how many traces it produced — above a **Reviews** section. As the panel explains: "Reviews are LLM-as-Judge runs that score every trace in this experiment. Scores from completed reviews appear under each item below." A review grades every response in the run automatically. Selecting **New review** defines a **criteria** rubric in plain language (for example, "Evaluate the response on accuracy") and picks the judge model; a separate LLM then reads each item's input, expected output, and the agent's actual output and assigns a score. Each review shows its status, the judge model that ran it (for example, `gpt-5`), and when it finished. Completed review scores roll up under each benchmark item, so an item can carry several scores from different reviews. The **Evaluate** dialog collects the criteria, a **score name** (the label the resulting scores are filed under, such as `accuracy`), a **max concurrency** limit for how many traces are judged in parallel, and the judge model. ![Evaluate dialog with a criteria textarea, a score name field, a max concurrency field, and the LLM selector](/images/docs/os/agent-settings/agent_settings_evals_new_review.webp) The model is chosen provider-first: pick the provider, then one of its models. Any LLM configured for your organization can act as the judge — including a model different from the one the agent itself runs on, which is the usual setup for an independent second opinion. ![LLM picker inside the Evaluate dialog, listing providers and the models available under the selected provider](/images/docs/os/agent-settings/agent_settings_evals_llm_picker.webp) ![Expanded accuracy review showing the criteria field and four produced scores, each with a numeric value and the judge's written reasoning for that benchmark item](/images/docs/os/agent-settings/agent_settings_evals_review.webp) Expanding a review reveals its **Criteria** and the **scores produced** — one per benchmark item, each with a numeric value and the judge's written reasoning. In the example above, the *accuracy* review explains why a clear, correct answer earned a full score while an empty or unanswerable response received a lower, neutral one. Reviews are the automated grading path; individual human, numeric, boolean, or categorical annotations can also be attached to any trace, and reusable rubrics can be saved and referenced across runs. Scores can also be added by hand from a trace. A manual score takes a name, a value between **0 and 1**, and an optional comment, and sits alongside the judge's scores on the same item. Score writes are ingested asynchronously, so a freshly added score appears immediately in the open panel and is confirmed on the next refresh. ## Programmatic Access Everything in this panel is available over the platform API, so evaluations can run in CI or from an AI agent: create benchmarks and items (JSON, CSV upload, or from chat traces), start experiment runs, launch LLM-as-Judge reviews, read scores, and export CSV. The API is packaged as the `iblai-api-agent-eval` skill at [github.com/iblai/vibe](https://github.com/iblai/vibe). ## Building Evals Into Your Own App The Evals panel is one of the agent-settings tabs published in the ibl.ai SDK, so the same screen can be mounted in a product you build yourself. Install the [iblai/vibe](https://github.com/iblai/vibe) skills and mount `<AgentEvaluationTab>` from `@iblai/iblai-js/web-containers/next` inside an `AgentSettingsProvider`. It handles benchmarks, runs, reviews, scores, export, and delete on its own; the host supplies a `getLLMProviderDetails` function so the judge picker can show provider logos and display names. The reusable skill for this workflow is [`iblai-vibe-agent-evals`](https://github.com/iblai/vibe/tree/main/skills/iblai-vibe-agent-evals), and the SDK overview is at [Vibe SDK](/developer/platform/vibe-sdk). ## Related - [Agent Settings: Analytics](analytics.md) — usage reports and dashboards for the agent - [Agent Settings: Chat History](history.md) — the raw conversation traces evaluations can be seeded from - [Agent Settings: Datasets](datasets.md) — the RAG documents that ground the agent (distinct from evaluation benchmarks) --- ## Agent Settings: Grader URL: https://ibl.ai/docs/os/agent-settings/grader # Agent Settings: Grader ![Grader panel on the Grading setup sub-tab, showing the grading toggle in its helper banner, the Grading setup and Rubric sub-tabs, the What gets graded and Feedback shared with the person selectors, the grading instructions textarea, and a Save button](/images/docs/os/agent-settings/agent_settings_grader_setup.webp) ## Overview The Grader panel is where you set up how an agent grades work against a rubric you define. The panel header reads "Grader" with the subtitle "Set up how your agent grades work against a rubric you define," and a helper banner explains: "Let your agent grade work. When this is on, the agent scores what people submit against the rubric you set up below and shares the result as feedback — great for essays, projects, and practice exercises." Grading is split across three sub-tabs. **Grading setup** decides *what* the agent grades and how much of the result it shares back. **Rubric** decides *how* it is scored: a table of criteria, each worth a number of points, with the overall score reported as points earned out of the total. **Results** is the record of every grade the agent has issued, where a human can override a score — and the correction is pushed back to the LMS the grade came from. Grading only runs when all three pieces are in place — the **Grading** tool is attached to the agent, a grading setup has been saved, and the rubric has at least one criterion. Until then the panel shows an amber warning naming what is still missing. To reach this screen, open the **Edit Agent** modal, keep the **Configurations** tab group selected, and click **Grader** in the left sidebar. The panel is permission-gated per sub-tab: only the views your role permits render, the default sub-tab is the first one you can see, and a user with no viewable sub-tab gets a "No access to grading settings" notice instead. ## Target Audience **Administrator** | **Instructor** | **Agent Builder** ## Panel Reference #### Grading toggle The switch in the helper banner attaches or detaches the **Grading** tool on the agent — it is the single activation control. While it is off, both sub-tabs are hidden and the panel shows a hint instead. Turning it off does **not** discard anything: the grading setup and the rubric are kept, so re-enabling grading restores the configuration you already built. #### Grading setup / Rubric / Results sub-tabs Three sub-tabs organize the panel. **Grading setup** holds the three configuration fields; **Rubric** holds the criteria table; **Results** lists the grades already issued. The rubric shows a hint to save the setup first until a grading configuration exists. #### What gets graded A dropdown with two options. **A submission** grades a piece of work the person hands in, like an essay or an answer. **The conversation** grades how the whole conversation went. #### Feedback shared with the person A dropdown controlling how much detail the person receives: **Overall feedback only**, **Feedback per criterion**, or **Overall + per criterion**. The overall score is always calculated — this setting only governs how much of it is shared back. #### Grading instructions A required textarea holding the context the agent uses every time it grades. This is where calibration lives: the audience and grade level, how strictly to weigh mistakes, what earns full credit, and what to do when a score is borderline. #### Save Enabled once the grading instructions are non-empty and something on the form has changed. The first save creates the grading configuration; later saves update it. #### Rubric table Each row is one thing the agent looks for and how many points it is worth, with **Name**, **Criteria**, and **Points** columns and a per-row actions menu. A footer reports "Total possible points: N" and "Overall score = points earned ÷ N." ![Rubric sub-tab showing a criteria table with Name, Criteria, and Points columns, an Add criterion button, and a footer with the total possible points and the overall-score formula](/images/docs/os/agent-settings/agent_settings_grader_rubric.webp) #### Criterion actions menu The `⋯` menu on each rubric row offers **Edit** and **Delete**. ![Per-row actions menu on a rubric criterion, offering Edit and Delete](/images/docs/os/agent-settings/agent_settings_grader_rubric_actions.webp) #### Add / Edit criterion A modal with three fields: **Name** (required — a short label such as "Clarity"), **Criteria** (required — what earns the points), and **Points** (a positive number). ![Add criterion modal with Name, Criteria, and Points fields](/images/docs/os/agent-settings/agent_settings_grader_criterion_add.webp) ![Edit criterion modal pre-filled with an existing criterion's name, description, and points](/images/docs/os/agent-settings/agent_settings_grader_criterion_edit.webp) #### Delete criterion A confirmation modal shown before a criterion is removed. The last remaining criterion cannot be deleted while grading is set up — add a replacement first, since a rubric with no criteria would leave grading misconfigured. ![Delete criterion confirmation modal](/images/docs/os/agent-settings/agent_settings_grader_criterion_delete.webp) #### Grade results table The **Results** sub-tab lists every grade this agent has issued, ten rows to a page, under the heading "Grade Results" and the line "Every grade this agent has issued. Override a score to correct it — the change is pushed back to the LMS the grade came from." Columns are **Learner** (email), **Score** (the effective score as a percent), **Status**, **Override**, and **Graded** (time-ago), with an **Override** button on each row. The **Override** column reads "Overridden · score · status" when a human has corrected the grade, and `—` when the AI score still stands. ![Results sub-tab showing the Grade Results heading, the learner search, status, and date-range filters, and a table of grades with Learner, Score, Status, Override, and Graded columns and a per-row Override button](/images/docs/os/agent-settings/agent_settings_grader_results.webp) #### Results filters Three filters sit above the table: a searchable **Search for User** learner combobox (the same learner list as the History panel's user filter, with an "All Users" reset), an **All Statuses** select offering Pending, Published, and Failed, and a **Pick a Date Range** two-month calendar. #### Override Grade modal Opened by a row's **Override** button. The top block restates the **Learner**, the **AI Score**, and the **Current Override** ("None" when there isn't one). **Override Points** takes a number between 0 and the rubric total, capped at 100 — the score pushed to the LMS becomes points ÷ total. **Override Feedback** is an optional textarea explaining the change for the learner. When an override already exists, a **Clear** button removes it and restores the AI score. ![Override Grade modal showing the learner, AI score, and current override, an Override Points field, an optional Override Feedback textarea, and Cancel and Save buttons](/images/docs/os/agent-settings/agent_settings_grader_result_override.webp) ## How to Use #### Step 1: Turn grading on Open the **Edit Agent** modal, keep **Configurations** selected, click **Grader** in the sidebar, and switch the toggle in the helper banner on. This attaches the **Grading** tool to the agent — the same state you would see in the Tools panel — and reveals the two sub-tabs. #### Step 2: Choose what gets graded On the **Grading setup** sub-tab, pick **A submission** if the agent should score work the person hands in, or **The conversation** if it should judge how the exchange went overall. #### Step 3: Decide how much feedback to share Set **Feedback shared with the person**. Start with **Overall feedback only** for a light touch, or **Overall + per criterion** when the person should see exactly where each point went. #### Step 4: Write the grading instructions Fill in the required **Grading instructions**. Be explicit about the audience, the calibration you want, and how to resolve borderline scores — this text is sent with every grading run. Then **Save** to create the configuration. #### Step 5: Build the rubric Switch to the **Rubric** sub-tab and use **Add criterion** to add each thing the agent should look for, with a description of what earns the points and a point value. The footer keeps a running total, and the overall score is points earned divided by that total. #### Step 6: Confirm nothing is missing If the amber misconfiguration warning is still showing, grading is on but either the setup has not been saved or the rubric is empty. Grading runs only once the tool is attached, the setup is saved, and at least one criterion exists. #### Step 7: Review grades and override where needed Once the agent has graded something, open the **Results** sub-tab to see every grade it has issued. Narrow the list with the learner search, the status select, or the date range, then click **Override** on a row to correct it: enter the points you want the learner to receive, add a short explanation, and save. The corrected score is sent back to the LMS the grade came from, and **Clear** on a later visit restores the AI score. ## Behavior Notes - **The toggle is a tool attachment.** Turning grading on adds the **Grading** tool to the agent; turning it off removes it. If the Grading tool is not available in your organization's tool catalogue, enabling the toggle reports an error. - **Your configuration survives a disable.** Detaching the tool deliberately leaves the grading setup and rubric intact, so rubric work is never lost across a disable/re-enable cycle. Re-attaching the tool provisions the configuration record again. - **An empty first run is normal.** On a brand-new agent there is no grading configuration yet; the panel treats that as the first-run state, not an error, and the first save creates it. - **Grading is scored out of the rubric total.** The overall score is always points earned ÷ total possible points, regardless of the feedback setting. - **An override is the human's final word, and it travels.** Overriding a result replaces the AI score for that learner and pushes the corrected score back to the LMS the grade came from. Clearing the override restores the AI score. - **Overriding is a separate permission.** The **Override** button only renders for users who hold the override permission for grade results; everyone else can read the Results table without being able to change a score. Each sub-tab is permission-gated the same way, so a role may see the rubric but not the results, or the reverse. ## Building Grading Into Your Own App The Grader panel is one of the agent-settings tabs published in the ibl.ai SDK, so the same screen can be mounted in a product you build yourself — all three sub-tabs included, results and overrides with them. Install the [iblai/vibe](https://github.com/iblai/vibe) skills and mount `<AgentGraderTab>` from `@iblai/iblai-js/web-containers/next` inside an `AgentSettingsProvider`; every label is overridable through a `labels` prop, and per-action RBAC is switched on with `enableRBAC`. The reusable skill for this workflow is [`iblai-vibe-agent-grader`](https://github.com/iblai/vibe/tree/main/skills/iblai-vibe-agent-grader), and the SDK overview is at [Vibe SDK](/developer/platform/vibe-sdk). --- ## Agent Settings: History URL: https://ibl.ai/docs/os/agent-settings/history # Agent Settings: History ![History panel in the Edit Agent modal showing a star rating summary, topic chips, filters for user, date range, sentiment and topic, an Export button, and a conversation list next to a detail pane](/images/docs/os/agent-settings/agent_settings_history.webp) ## Overview The History panel is where administrators review past conversations with an agent. The panel header reads: "View and manage conversation history," and the helper banner explains: "Look back at past conversations. See what people have been asking and how your agent replied, so you can spot gaps and keep improving it." The panel opens with an AI-generated summary block: a star rating out of 5 for the agent's conversations, a short narrative summary of the topics and interactions, and topic chips extracted from the chat history. When there is no chat history yet, the rating shows "0.0 out of 5" with an explanatory note (for example, "No chat history was provided, so there are no student-agent topics, insights, or interactions to summarize.") and placeholder chips such as "no-chat-history" and "insufficient-data." Below the summary sit the filters and the conversation browser: a list of conversations on the left and a detail pane on the right that reads "Select a conversation to view details." until one is chosen. To reach this screen, open the **Edit Agent** modal, switch to the **Runtime** tab group (its sidebar lists Tasks, Memory, History, Audit, and Analytics), and select **History**. ## Target Audience **Administrator** | **Agent Builder** ## Panel Reference #### Rating summary A star rating ("{rating} out of 5") with a text summary of the conversation history. It condenses what users have been discussing with the agent; with no conversations yet, it explains that there is nothing to summarize. #### Topic chips Tag-style chips below the summary showing topics detected across conversations. In an empty state, the chips read "no-chat-history" and "insufficient-data." #### Search for User A searchable dropdown that filters the conversation list to a specific user, with an **All Users** option. #### Pick a Date Range A calendar filter that limits the conversation list to a chosen date range. #### All Sentiments A dropdown that filters conversations by detected sentiment — **Positive**, **Neutral**, or **Negative** — defaulting to **All Sentiments**. #### All Topics A dropdown that filters conversations by detected topic, defaulting to **All Topics**. #### Export Downloads the chat history as a file, respecting the active filters. The button shows "Exporting..." while the download is being prepared. #### Conversation list Each conversation card shows a relative timestamp (for example "21 days ago"), the user's name — or "Anonymous" for unauthenticated users — the conversation title, and a preview of the reply (for example "Hello! How may I help you today?"). The list supports pagination when there are many conversations. #### Conversation details pane Clicking a conversation opens it in the right-hand pane, where the full transcript can be read message by message. Until a conversation is selected, the pane reads "Select a conversation to view details." ## How to Use #### Step 1: Open the History panel In the **Edit Agent** modal, select the **Runtime** tab group, then click **History** in the sidebar. The rating summary, topic chips, and conversation list load. #### Step 2: Scan the summary Read the star rating, narrative summary, and topic chips for a quick sense of how conversations are going and what users ask about most. #### Step 3: Filter the conversations Narrow the list with **Search for User**, **Pick a Date Range**, **All Sentiments**, or **All Topics** — for example, filter to Negative sentiment to find conversations where the agent may have fallen short. #### Step 4: Read a transcript Click a conversation card to open it in the detail pane and review the full exchange message by message. Use what you find to adjust the agent's prompts, datasets, or settings. #### Step 5: Export if needed Click **Export** to download the (filtered) chat history as a file for offline review, sharing, or archiving. --- ## Agent Settings: LLM Configuration URL: https://ibl.ai/docs/os/agent-settings/llm-configuration # Agent Settings: LLM Configuration ![LLM Configuration panel with a Search Providers box and provider cards for Amazon, Anthropic, Microsoft, DeepSeek, Google, Groq, NVIDIA, OpenAI, Perplexity, and xAI, with OpenAI highlighted as selected](/images/docs/os/agent-settings/agent_settings_llm_configuration.webp) ## Overview The LLM panel chooses which AI provider — and, in the follow-up dialog, which model — powers an agent's replies. The panel header reads: "LLM Configuration — Configure the language model settings for your agent," and the helper text explains: "This is the brain behind your agent — the AI model that powers every reply. Bigger models reason better on tricky questions; lighter ones are faster and cost less. Not sure? The default is a solid all-rounder." The panel shows one card per available LLM provider. The screenshot shows Amazon, Anthropic, Microsoft, DeepSeek, Google, Groq, NVIDIA, OpenAI (highlighted as the current selection), Perplexity, and xAI. The provider list is served by the platform, so what appears depends on your organization's configuration. This provider choice is a core part of the platform's model-agnostic design — an agent can be switched between providers at any time. To reach this screen, open the **Edit Agent** modal, stay on the **Configurations** tab group, and select **LLM** in the left sidebar. ## Target Audience **Administrator** | **Agent Builder** ## Panel Reference #### Search Providers A search box that filters the provider grid by name as you type. #### Provider cards One card per LLM provider, showing the provider's logo and name. The provider currently assigned to the agent is outlined (OpenAI in the screenshot). Clicking a card opens the **LLM Selection** dialog listing that provider's available models; the agent's model is only changed once you pick a model there. ## How to Use #### Step 1: Open the LLM panel Open the **Edit Agent** modal, keep **Configurations** selected, and click **LLM** in the sidebar. #### Step 2: Find a provider Scan the grid, or type in **Search Providers** to filter it. The outlined card is the agent's current provider. #### Step 3: Open the provider's models Click a provider card. The **LLM Selection** dialog opens with that provider's model list. #### Step 4: Pick the model Select a model in the dialog. The agent's provider and model are saved immediately and a "LLM updated successfully" confirmation appears. You can repeat this at any time to move the agent to a different provider or model. --- ## Agent Settings: LLM Selection URL: https://ibl.ai/docs/os/agent-settings/llm-selection # Agent Settings: LLM Selection ![LLM Selection dialog listing OpenAI models such as chat-latest, gpt-4o-mini, gpt-5, and gpt-5.2-pro in a searchable grid, with gpt-4o-mini highlighted as selected](/images/docs/os/agent-settings/agent_settings_llm_selection.webp) ## Overview The LLM Selection dialog picks the exact model an agent uses from a chosen provider. Its subtitle reads: "Choose your preferred LLM from the available provider to tailor your experience." The dialog opens after you click a provider card (for example, OpenAI) on the LLM panel. Each model appears as a card with the provider's icon and the model name. The agent's current model is highlighted (the screenshot shows `gpt-4o-mini` selected from the OpenAI list, which includes models such as `chat-latest`, `gpt-4.1`, `gpt-4o-mini`, `gpt-5`, and the `gpt-5.x` family with mini/nano/pro variants). The available models are served by the platform for the selected provider, so the list you see depends on your organization's configuration. To reach this dialog, open the **Edit Agent** modal, stay on the **Configurations** tab group, select **LLM** in the left sidebar, then click a provider card. ## Target Audience **Administrator** | **Agent Builder** ## Dialog Reference #### Search A search box at the top filters the model grid by name as you type — useful when a provider exposes a long model list. #### Model cards One card per model offered by the selected provider. Clicking a card immediately assigns that provider and model to the agent — the platform saves the agent's `llm_provider` and `llm_name` and shows an "LLM updated successfully" confirmation (or an error message if the update fails). The currently assigned model is outlined so you can see the active choice at a glance. #### Close (X) Closes the dialog without changing the agent's model. You can also return to the provider grid to pick a different provider first. ## How to Use #### Step 1: Open the LLM panel Open the **Edit Agent** modal, keep **Configurations** selected, and click **LLM** in the sidebar. #### Step 2: Pick a provider Click the provider card whose models you want (for example, OpenAI, Anthropic, or Google). The LLM Selection dialog opens with that provider's models. #### Step 3: Find the model Type in the **Search** box to filter the grid if the list is long. #### Step 4: Select the model Click the model card. The agent is updated immediately and a success message confirms the change — there is no separate save step. Every subsequent reply from the agent is generated by the newly selected model. --- ## Agent Settings: LTI Keys URL: https://ibl.ai/docs/os/agent-settings/lti-keys # Agent Settings: LTI Keys ![LTI panel in the Edit Agent modal on the Keys sub-tab, showing the LTI enable toggle, the Links, Keys, Tools and Tool Endpoints sub-tabs, a Create LTI Key button, and a table listing a key name with a truncated public key](/images/docs/os/agent-settings/agent_settings_lti_keys.webp) ## Overview The **Keys** sub-tab of the LTI panel manages the RSA key pairs used to sign LTI messages. The caption on this sub-tab explains: "Platform-wide RSA keys used to sign LTI messages. Select a key when creating an LTI tool." Keys are platform-wide — they belong to the organization, not to a single agent — and the same key list is visible from any agent's LTI panel. In LTI 1.3, the tool signs its messages with a private key and the LMS verifies them against the matching public key (published via the JWKS endpoint). Each key created here holds that key pair; when you register an LTI tool on the **Tools** sub-tab, you select one of these keys as its signing key. To reach this screen, open the **Edit Agent** modal, switch to the **Integrations** tab group (its sidebar lists Sandbox, Access, Tools, MCP, Datasets, API, LTI, and Embed), select **LTI**, and click the **Keys** sub-tab. The panel header reads: "Manage LTI agent links, signing keys, tools, and platform endpoints." The LTI panel is admin-only. ## Target Audience **Administrator** ## Panel Reference #### LTI enable toggle The banner at the top of the LTI panel reads: "Let this agent be added to a Learning Management System (Canvas, Brightspace, Blackboard or Moodle) so students can open it right inside their course. When on, create the links, signing keys, and tools your LMS needs below." The toggle controls whether LTI launches are allowed for this agent — the same setting as **Enable LTI launches** in the agent's Settings. Creating LTI sub-resources requires it to be on. #### Sub-tab bar Four sub-tabs organize the LTI panel: **Links** (the launch link for this agent), **Keys** (this sub-tab), **Tools** (registered LMS platforms), and **Tool Endpoints** (the fixed URLs to give your LMS). #### Create LTI Key Opens a dialog to create a new signing key. You provide a name; the platform generates the RSA key pair. The new key then appears in the table and can be selected when creating an LTI tool. #### Keys table Each key is a row with: - **NAME** — the key's display name. - **PUBLIC KEY** — a truncated preview of the PEM-encoded public key (beginning `-----BEGIN PUBLIC KEY-----`). - **ACTIONS** — a menu per row. **Edit** opens the key detail, where you can rename the key and view its full PEM public key and its public JWK (the JSON Web Key form published at the JWKS endpoint). **Delete** removes the key after confirmation — note that a key cannot be deleted while an LTI tool still references it. The list is paginated at 10 rows per page. #### Key detail Choosing **Edit** opens the key's detail dialog: the key name can be changed here, and the full **Public Key (PEM)** and **Public JWK** are shown with copy buttons. Only the public halves are exposed — the private key never leaves the platform, which is what lets the LMS verify a launch without ever holding a secret of yours. ![LTI key detail dialog showing the key name field, the full PEM-encoded public key, and the public JWK, each with a copy button](/images/docs/os/agent-settings/agent_settings_lti_key_detail.webp) Deleting is blocked while a tool still references the key, and the reason is surfaced in the dialog rather than failing silently — re-point the tool at another key first. ## How to Use #### Step 1: Open the Keys sub-tab In the **Edit Agent** modal, go to **Integrations → LTI** and click **Keys**. Make sure the LTI toggle at the top of the panel is on. #### Step 2: Create a key Click **Create LTI Key**, give the key a recognizable name, and submit. The key appears in the table with a preview of its public key. #### Step 3: Retrieve the public key when needed Open the key's actions menu and choose **Edit** to view the full PEM public key and the public JWK. Most LMS registrations do not need these directly — the LMS fetches public keys from the organization's JWKS endpoint (see the **Tool Endpoints** sub-tab) — but they are available for platforms that require pasting a key. #### Step 4: Use the key in a tool Switch to the **Tools** sub-tab and create or edit an LTI tool; select this key as the tool's signing key so launches from that LMS are signed with it. #### Step 5: Rename or delete Use the row's actions menu to rename a key, or delete one that is no longer used. Delete the referencing tool first if the key is still attached to one. --- ## Agent Settings: LTI Links URL: https://ibl.ai/docs/os/agent-settings/lti-links # Agent Settings: LTI Links ![LTI panel in the Edit Agent modal on the Links sub-tab, showing the LTI enable toggle, the Links, Keys, Tools and Tool Endpoints sub-tabs, and a table with a link name, its target link URI with copy button, and an edit action](/images/docs/os/agent-settings/agent_settings_lti_links.webp) ## Overview The **Links** sub-tab of the LTI panel manages the launch link that lets this agent be opened from a Learning Management System. The caption on this sub-tab explains: "Create and manage the LTI link that lets this agent be launched from an LMS." Unlike keys and tools, which are platform-wide, the link belongs to this specific agent — it is the target the LMS points at so students land in this agent. Each link has a name and an auto-generated **Target Link URI** (for example `https://learn.iblai.org/lti/1p3/la...`). That URI is the value you paste into your LMS (Canvas, Brightspace, Blackboard, or Moodle) as the LTI target link so that launching the placement opens this agent inside the course. An agent has a single LTI link: once one exists, the create action is no longer offered and the existing link is managed in place. To reach this screen, open the **Edit Agent** modal, switch to the **Integrations** tab group (its sidebar lists Sandbox, Access, Tools, MCP, Datasets, API, LTI, and Embed), select **LTI**, and click the **Links** sub-tab. The panel header reads: "Manage LTI agent links, signing keys, tools, and platform endpoints." The LTI panel is admin-only. ## Target Audience **Administrator** ## Panel Reference #### LTI enable toggle The banner at the top of the LTI panel reads: "Let this agent be added to a Learning Management System (Canvas, Brightspace, Blackboard or Moodle) so students can open it right inside their course. When on, create the links, signing keys, and tools your LMS needs below." The toggle controls whether LTI launches are allowed for this agent — the same setting as **Enable LTI launches** in the agent's Settings. Creating a link requires it to be on. #### Sub-tab bar Four sub-tabs organize the LTI panel: **Links** (this sub-tab), **Keys** (platform-wide signing keys), **Tools** (registered LMS platforms), and **Tool Endpoints** (the fixed URLs to give your LMS). #### Links table The agent's LTI link is a row with: - **NAME** — the link's display name (for example "Intro to course creator"), chosen when the link is created and editable afterwards. This is also the name shown when the agent is picked during deep-linking content selection in the LMS. - **TARGET LINK URI** — the auto-generated launch URL for this agent, shown truncated with a copy button so it can be copied in full. It reads `—` until the link has finished building. - **STATUS** — where the build has got to: **Pending** or **Building** in amber with a spinner, **Ready** in green, or **Failed** in red with a tooltip explaining why. - **ACTIONS** — a pencil (edit) button that opens the link for renaming once it is ready, or a **Retry** button on a failed row. When no link exists yet, the sub-tab shows an empty state with a create button; filling in a name and submitting starts the build. #### Status, Refresh, and Retry Creating a link is not instant. Behind it the platform provisions a course, which takes longer than a browser request should wait, so the link is created in the background: the row appears immediately as **Pending**, moves to **Building**, and lands on **Ready** with its Target Link URI filled in. While any link is still building, a **Refresh** button sits above the table to re-check its state. A link that ends up **Failed** offers **Retry** in place of its edit action, which clears the failed attempt and starts a fresh build from the same details. Editing is gated on readiness: a link can only be renamed once it is **Ready**, so a build in progress or a failed row cannot be edited in place. ## How to Use #### Step 1: Open the Links sub-tab In the **Edit Agent** modal, go to **Integrations → LTI**. The **Links** sub-tab is the default. Make sure the LTI toggle at the top of the panel is on. #### Step 2: Create the link If the agent has no link yet, use the create action, enter a descriptive name, and submit. The row appears straight away as **Pending**. (Each agent has one LTI link.) #### Step 3: Wait for the build, then copy the Target Link URI The link builds in the background. Use **Refresh** to re-check it; once the status reads **Ready**, the Target Link URI is filled in and the copy button beside it gives you the full value. In your LMS, use this value as the placement's target link URI when adding the tool to a course. If the status ends up **Failed**, use **Retry** on that row rather than creating a second link. #### Step 4: Complete the LMS side The link works together with the rest of the LTI configuration: register the LMS on the **Tools** sub-tab (issuer, client ID, and a signing key from **Keys**) and give the LMS the fixed URLs from **Tool Endpoints**. Once both sides are registered, launching the placement in the LMS opens this agent inside the course. #### Step 5: Rename when needed Once the link is **Ready**, click the pencil icon to rename it — for example to match the course or placement it serves. The target URI itself is generated by the platform. ## Behavior Notes - **Creating a link provisions a course, so it runs in the background.** The row is created immediately in a pending state and finishes out of band; the Target Link URI only exists once the build completes. - **Creating a link switches LTI on.** If the LTI toggle is off when you create the link, the agent is made LTI-accessible automatically rather than the create failing. - **Retry replaces, it does not repair.** Retrying a failed link clears the failed attempt and starts a fresh build from the same name — there is never a second, half-built link left behind. - **The name is user-facing.** It is what an instructor sees when picking this agent during deep-linking content selection, so it is worth naming for the course rather than for the agent. --- ## Agent Settings: LTI Tool Endpoints URL: https://ibl.ai/docs/os/agent-settings/lti-tool-endpoints # Agent Settings: LTI Tool Endpoints ![LTI panel in the Edit Agent modal on the Tool Endpoints sub-tab, listing four fixed endpoint cards — Redirect URI, Login Initiations Endpoint, Deep Linking Endpoint, and JWKS Endpoint — each with a URL and copy button](/images/docs/os/agent-settings/agent_settings_lti_tool_endpoints.webp) ## Overview The **Tool Endpoints** sub-tab of the LTI panel lists the fixed URLs your Learning Management System needs when registering this platform as an LTI 1.3 tool. The caption on this sub-tab explains: "Share these endpoints with the LTI platform when registering this deployment. They are fixed for this organization." The endpoints are read-only — they are generated from the organization's LMS domain and are the same for every agent in the organization. During LTI 1.3 tool registration (in Canvas, Brightspace, Blackboard, or Moodle), the LMS asks for the tool's redirect/launch URL, its OIDC login initiation URL, optionally a deep-linking URL, and the tool's public keyset (JWKS) URL. This screen collects all four in one place, each with a copy button (the button label flips to "Copied" after copying). To reach this screen, open the **Edit Agent** modal, switch to the **Integrations** tab group (its sidebar lists Sandbox, Access, Tools, MCP, Datasets, API, LTI, and Embed), select **LTI**, and click the **Tool Endpoints** sub-tab. The panel header reads: "Manage LTI agent links, signing keys, tools, and platform endpoints." The LTI panel is admin-only. ## Target Audience **Administrator** ## Endpoint Reference All four endpoints are absolute https URLs on the `/lti/` path of the organization's LMS domain and share a single origin (for example `https://learn.iblai.org/...`). #### Redirect URI "Where the LTI platform sends the launch." The launch/redirect URL — for example `https://learn.iblai.org/lti/1p3/launch/`. Enter it as the tool's redirect URI (and target/launch URL) in the LMS's LTI 1.3 registration. #### Login Initiations Endpoint "OIDC third-party login initiation URL." For example `https://learn.iblai.org/lti/1p3/login/`. LTI 1.3 launches begin with an OIDC third-party-initiated login; the LMS calls this URL first to start the authentication handshake. #### Deep Linking Endpoint "Used when selecting content via deep linking." For example `https://learn.iblai.org/lti/1p3/deep-linking/launch/`. Configure this in the LMS if you want instructors to use the LTI Deep Linking flow to pick content when placing the tool. #### JWKS Endpoint "Public keys (JWKS) for this org." For example `https://learn.iblai.org/lti/1p3/pub/orgs/{org-id}/jwks/`. This URL serves the organization's public keys in JSON Web Key Set format — the public halves of the signing keys managed on the **Keys** sub-tab — so the LMS can verify signed LTI messages. Note that this URL is organization-specific (it contains the org identifier). #### Copy buttons Each endpoint card has a copy-to-clipboard button; its label flips to "Copied" to confirm the URL is on the clipboard. ## How to Use #### Step 1: Open the Tool Endpoints sub-tab In the **Edit Agent** modal, go to **Integrations → LTI** and click **Tool Endpoints**. The four endpoint cards render with their organization-specific URLs. #### Step 2: Start the LMS-side registration In your LMS admin area, begin an LTI 1.3 / Advantage tool registration (for example a Developer Key in Canvas or an LTI registration in Moodle). #### Step 3: Paste the endpoints Copy each URL from this screen into the matching field of the LMS form: **Redirect URI** for the redirect/target link, **Login Initiations Endpoint** for the OIDC login URL, **Deep Linking Endpoint** if you use content selection, and **JWKS Endpoint** as the tool's public keyset URL. #### Step 4: Bring back the platform's values The LMS registration produces its own values — issuer, client ID, auth login URL, auth token URL, and the platform's JWKS. Enter those on the **Tools** sub-tab (Create LTI Tool) to complete the pairing, and use the **Links** sub-tab's Target Link URI for the course placement. --- ## Agent Settings: LTI Tools URL: https://ibl.ai/docs/os/agent-settings/lti-tools # Agent Settings: LTI Tools ![LTI panel in the Edit Agent modal on the Tools sub-tab, showing the LTI enable toggle, the Links, Keys, Tools and Tool Endpoints sub-tabs, a Create LTI Tool button, and a table of tools with name, issuer, client ID, and edit actions](/images/docs/os/agent-settings/agent_settings_lti_tools.webp) ## Overview The **Tools** sub-tab of the LTI panel registers the external LTI platforms (your LMS instances) that are allowed to launch agents on this organization. The caption on this sub-tab explains: "Platform-wide integrations with external LTI platforms. Values come from the LTI platform." Like keys, tools are platform-wide — they belong to the organization, not to a single agent — so the same list appears from any agent's LTI panel. Each tool records the identity of one LMS registration: the platform's **issuer**, the **client ID** the LMS assigned to this integration, the platform's OIDC auth URLs, its public keyset, and the signing key (from the **Keys** sub-tab) used to sign messages for that platform. In LTI 1.3 terms, this is where you store the platform's registration values so the two sides can trust each other. To reach this screen, open the **Edit Agent** modal, switch to the **Integrations** tab group (its sidebar lists Sandbox, Access, Tools, MCP, Datasets, API, LTI, and Embed), select **LTI**, and click the **Tools** sub-tab. The panel header reads: "Manage LTI agent links, signing keys, tools, and platform endpoints." The LTI panel is admin-only. ## Target Audience **Administrator** ## Panel Reference #### LTI enable toggle The banner at the top of the LTI panel reads: "Let this agent be added to a Learning Management System (Canvas, Brightspace, Blackboard or Moodle) so students can open it right inside their course. When on, create the links, signing keys, and tools your LMS needs below." The toggle controls whether LTI launches are allowed for this agent — the same setting as **Enable LTI launches** in the agent's Settings. #### Sub-tab bar Four sub-tabs organize the LTI panel: **Links** (the launch link for this agent), **Keys** (platform-wide signing keys), **Tools** (this sub-tab), and **Tool Endpoints** (the fixed URLs to give your LMS). #### Create LTI Tool Opens the tool registration form. Its fields hold values that come from the LTI platform's own registration: - **Title** — a display name for the integration (for example the LMS instance it represents). - **Issuer** — the platform's issuer URL (for example `https://iblai.app`), exactly as the LMS publishes it. - **Client ID** — the client identifier the LMS assigned to this tool registration. - **Auth login URL** — the platform's OIDC authorization endpoint. - **Auth token URL** — the platform's OAuth2 token endpoint. - **Key set** — the platform's public keys, provided either as a **JWKS URL** (for example `https://lms.example.com/.well-known/jwks.json`) or as raw JWKS JSON. - **Auth audience** — optional, and usually left blank; set it only when the platform requires a specific audience value on the token request. - **Signing key** — one of the platform-wide keys from the **Keys** sub-tab, used to sign LTI messages for this platform. Create the key first if none exists. - **Deployment IDs** — the deployment identifiers the LTI platform assigns, entered one per line or comma-separated. A single registration can carry several deployments, which is how one LMS covers multiple sub-accounts or course shells. Every field except the auth audience is required. Title, issuer, client ID, and the two OIDC URLs come straight from the LMS registration — copy them rather than retyping, since a single character's difference makes launches fail verification. ![Create LTI Tool dialog with fields for the title, issuer, client ID, auth login and token URLs, auth audience, the JWKS key set, the signing key selector, and deployment IDs](/images/docs/os/agent-settings/agent_settings_lti_tool_create.webp) #### Tools table Each registered platform is a row with: - **NAME** — the tool's title (for example "Course Creator 1"). - **ISSUER** — the platform issuer URL (for example `https://iblai.app` or `https://platform.iblai.app`). - **CLIENT ID** — the client identifier from the LMS registration. - **ACTIONS** — a pencil (edit) button that reopens the registration form to update any of the values. ## How to Use #### Step 1: Register the tool in your LMS first In the LMS admin area, create an LTI 1.3 registration using the URLs from the **Tool Endpoints** sub-tab. The LMS then issues the values you need here: issuer, client ID, auth login URL, auth token URL, and its JWKS. #### Step 2: Create a signing key If you have not already, go to the **Keys** sub-tab and create an LTI key — the tool form requires one as its signing key. #### Step 3: Create the LTI tool On **Tools**, click **Create LTI Tool** and fill the form with the platform's values: title, issuer, client ID, auth login URL, auth token URL, and the key set (JWKS URL or raw JWKS JSON). Select your signing key and submit. The tool appears in the table. #### Step 4: Place the agent in a course With the platform registered here and the agent's launch link created on the **Links** sub-tab, add the placement in your LMS course using the link's Target Link URI. Students can then open the agent right inside their course. #### Step 5: Edit when platform values change If the LMS rotates its client ID, URLs, or keyset, click the pencil icon on the tool's row and update the stored values so launches keep verifying. --- ## Agent Settings: MCP URL: https://ibl.ai/docs/os/agent-settings/mcp # Agent Settings: MCP ![MCP panel with search, date range, and transport filters above a Featured Connectors grid showing Ahrefs, Asana, Atlassian, DropBox, Figma, and GitHub cards with OAuth and scope badges and Connect buttons](/images/docs/os/agent-settings/agent_settings_mcp.webp) ## Overview The MCP panel connects an agent to external systems through Model Context Protocol (MCP) servers. The panel header reads: "Manage Model Context Protocol connectors for your agent," and the helper text explains: "Connect your agent to your own systems through MCP servers, so it can reach your data and services right inside a conversation." The panel leads with a **Featured Connectors** grid of ready-made integrations — the screenshot shows Ahrefs, Asana, Atlassian, DropBox, Figma, and GitHub, each with a short description, status ("Not Connected"), badges, a **Connect** button, and a created date. Beyond featured connectors, the panel supports adding custom MCP connectors pointing at any MCP server URL. Note that for connected servers to be usable in chat, the **MCP** tool must also be enabled on the **Tools** panel. To reach this screen, open the **Edit Agent** modal, switch to the **Integrations** tab group, and select **MCP** in the left sidebar. ## Target Audience **Administrator** | **Agent Builder** ## Panel Reference #### Search by name Filters the connector list by name as you type. #### Pick a Date Range Filters connectors by their creation date. #### All Transports A dropdown filtering connectors by MCP transport. The supported transports are **Websocket** and **Streamable Http**; "All Transports" shows everything. #### Featured Connectors ![Featured Connectors grid showing pre-configured connector cards with service logos, connection status, description, OAuth and scope badges, and a Connect button](/images/docs/os/agent-settings/agent_settings_mcp_featured.webp) Pre-configured connector cards for common services. Each card shows the service logo and name, connection status ("Not Connected" until you connect), a one-line description (for example, "Access to GitHub repositories and user data."), badges, a **Connect** button, and its created date. #### Connector badges The badges on each card describe how the connector authenticates and at what level: a blue **OAuth** badge marks the authentication method, a yellow scope badge — **Organization**, **Agent**, or **User** — marks the authentication scope (Organization: one OAuth connection shared by all agents in the organization; Agent: available only to this agent; User: each user authenticates individually when chatting), and a gray tag shows the connector's slug (for example, `github`). #### Connect Starts the connection flow for a featured connector. For OAuth connectors this launches the service's OAuth authorization; on success the connector shows as connected ("{name} connected successfully") and can be activated or deactivated for the agent. A connected service can later be disconnected. #### Custom connectors (Add MCP Connector) ![Add MCP Connector dialog with fields for connector name, server URL, scope, transport, and authentication method](/images/docs/os/agent-settings/agent_settings_mcp_add.webp) Beyond the featured grid, the panel's connector management supports adding your own MCP connector with: a **Connector Name** and optional image and description; the **Connector Server** URL; a **Connector Scope** of **All Agents** or **This Agent**; a **Transport** (Websocket or Streamable Http); an **Authentication Method** of **No Authentication**, **API Key**, or **OAuth**; and for authenticated connectors an **Authentication Scope** (Organization, Agent, or User) plus token details (token type and token for API-key auth). Existing tokens are hidden on edit and kept unless replaced. ![Edit connector dialog with the existing connector details pre-filled and the token field left blank](/images/docs/os/agent-settings/agent_settings_mcp_edit.webp) ## How to Use #### Step 1: Open the MCP panel Open the **Edit Agent** modal, click the **Integrations** tab group, then select **MCP**. #### Step 2: Connect a featured service Find the service in **Featured Connectors** (use search if needed) and click **Connect**. Complete the OAuth authorization when prompted. The card's status changes once the connection succeeds. #### Step 3: Add a custom MCP server (optional) Use the add-connector flow to register your own MCP server: name it, paste the server URL, choose the transport, pick whether it serves all agents or only this one, and configure authentication (none, API key, or OAuth with a Organization/Agent/User scope). #### Step 4: Enable the MCP tool On the **Tools** panel, toggle **MCP** on so the agent can actually call connected MCP servers during conversations. #### Step 5: Manage connections Return here to activate/deactivate, edit, disconnect, or remove connectors. Removal asks for confirmation and cannot be undone. --- ## Agent Settings: Memory URL: https://ibl.ai/docs/os/agent-settings/memory # Agent Settings: Memory ![Memory panel with an enable toggle, user and date filters, category tabs such as Knowledge Gaps and Preferences, an Add Memory button, and saved memory cards with timestamps and user emails](/images/docs/os/agent-settings/agent_settings_memory.webp) ## Overview The Memory panel reviews and manages what an agent remembers about individual users across conversations. The panel header reads: "Configure memory settings for your agent," and the helper text explains: "Let this agent remember useful details from past conversations — like a returning colleague — so people don't have to repeat themselves. When on, review and manage what it remembers below," with a master toggle to turn memory on or off for the agent. Each saved memory is a card showing when it was captured (for example, "less than a minute ago"), which user it belongs to (their email), and the remembered fact (for example, "Prefers project-based learning over lecture-based content."). Memories are organized into categories and can be filtered, added, edited, and deleted by administrators. To reach this screen, open the **Edit Agent** modal, switch to the **Runtime** tab group (its sidebar lists Tasks, Memory, History, Audit, and Analytics), and select **Memory**. ## Target Audience **Administrator** | **Agent Builder** ## Panel Reference #### Memory toggle The switch in the helper banner enables or disables memory for this agent. When on, the agent stores and references useful details from conversations; when off, it does not remember users between sessions. (Conversations in private mode never store memory regardless of this setting.) #### Search for User A searchable dropdown listing the users who have saved memories (by email), plus an **All Users** option. Selecting a user filters the memory list to just that person. #### Pick a Date Range Filters the memory list to entries captured within a chosen date range. #### Category tabs Filter tabs across the top of the list: **All** plus the organization's memory categories — the screenshot shows **Knowledge Gaps**, **Learning Goals**, **Personal Context**, and **Preferences**. Up to six categories are shown inline; additional ones collapse into a **More** menu. Categories are admin-defined, so your set may differ. #### Categories Opens the **Manage Categories** dialog, where you can add a new category by name, rename existing ones, and delete them (with confirmation). Categories structure how memories are classified and filtered. #### Add Memory Opens the **Add Memory** dialog: pick a **Category**, type the **Memory** content (10-character minimum), and click **Save**. This lets an administrator seed or correct what the agent knows about users without waiting for it to be learned in conversation. #### Memory cards Each card shows the memory's relative timestamp, the owning user's email, and the memory text. The "..." actions menu on a card offers **Edit** (change the content or category) and **Delete** (with confirmation). A **Delete All** action is available to bulk-delete the memories in the current category filter. ## How to Use #### Step 1: Open the Memory panel Open the **Edit Agent** modal, click the **Runtime** tab group, then select **Memory**. #### Step 2: Turn memory on Enable the toggle in the banner so the agent remembers useful details from past conversations. Pair this with the **Remember past conversations** capability so memory is active in chat. #### Step 3: Review what the agent remembers Filter by user with **Search for User**, narrow by date with **Pick a Date Range**, and switch category tabs (Knowledge Gaps, Learning Goals, Personal Context, Preferences, and so on) to audit stored memories. #### Step 4: Curate memories Use **Add Memory** to insert facts the agent should know, the card's **Edit** action to fix inaccurate ones, and **Delete** (or **Delete All**) to remove anything that should not be retained. #### Step 5: Maintain categories Click **Categories** to add, rename, or remove memory categories as your classification needs evolve. --- ## Agent Settings: Privacy URL: https://ibl.ai/docs/os/agent-settings/privacy # Agent Settings: Privacy ![Privacy panel with the PII detection master toggle enabled, a "When PII is detected" dropdown set to Redact, thirteen entity type chips such as Person, Email, Phone and SSN, and an "Also filter AI responses" toggle](/images/docs/os/agent-settings/agent_settings_privacy.webp) ## Overview The Privacy panel configures automatic detection and filtering of personally identifiable information (PII) in chat messages. Its description reads: "Detect and filter personally identifiable information from chat messages." The intro banner explains the effect: "Automatically find and hide personal information — names, emails, phone numbers and more — in messages before the agent sees them. When on, choose what to detect and how to handle it below." Filtering happens on the way in: user messages are scanned and PII is handled per your chosen action **before** the agent (and the underlying model) sees the text. An optional second toggle extends the same filtering to the AI's responses on the way out. To reach this panel, open the **Edit Agent** modal, stay on the **Configurations** tab group, and select **Privacy** in the left sidebar. ## Target Audience **Administrator** | **Agent Builder** ## Settings Reference #### Privacy master toggle The switch beside the intro banner enables the privacy router for this agent. When it is off, the dependent fields below (action, entity types, response filtering) are hidden; when on, they appear and take effect. #### When PII is detected A dropdown selecting how detected PII is handled. Three actions are available: - **Redact** (shown selected) — helper text: "PII is replaced with its type — e.g. \"Email [EMAIL_ADDRESS]\"." ![Privacy panel with the Redact action selected, showing the entity-type chips below it](/images/docs/os/agent-settings/agent_settings_privacy_redact.webp) - **Mask** — obscures the detected value rather than naming its type. ![Privacy panel with the Mask action selected](/images/docs/os/agent-settings/agent_settings_privacy_mask.webp) - **Block** — stops the message; choosing Block reveals a **Block Message** field where you set the text shown to the user, saved when the field loses focus. ![Privacy panel with the Block action selected, revealing the Block Message field](/images/docs/os/agent-settings/agent_settings_privacy_block.webp) #### Entity Types A row of selectable chips listing the PII categories the detector looks for: **Person, Email, Phone, SSN, Credit Card, Location, Date / Time, Passport, Driver's License, IP Address, IBAN, Medical License,** and **Bank Number**. Chips toggle on and off individually. When none are explicitly selected the hint "Using defaults." is shown, meaning the platform's default entity set applies. #### Also filter AI responses A toggle (off in the screenshot) that applies the same PII detection and handling to the agent's outgoing responses, not just incoming user messages. ## How to Use #### Step 1: Open the Privacy panel Open the **Edit Agent** modal, keep **Configurations** selected, and click **Privacy** in the sidebar. #### Step 2: Turn on PII detection Enable the master toggle next to the intro banner. The action selector, entity chips, and response-filter toggle appear. #### Step 3: Choose the handling action In **When PII is detected**, pick **Redact** to replace values with their type, **Mask** to obscure them, or **Block** to stop the message entirely. If you pick Block, enter the message users should see in the Block Message field. #### Step 4: Pick entity types Click chips to select exactly which PII categories to detect — for example Person, Email, and Phone for a support agent, or SSN, Credit Card, IBAN, and Bank Number for finance-adjacent deployments. Leave all chips unselected to keep the defaults ("Using defaults."). #### Step 5: Optionally filter responses too Turn on **Also filter AI responses** if the agent's own output should pass through the same PII filter before reaching users. --- ## Agent Settings: Prompts URL: https://ibl.ai/docs/os/agent-settings/prompt # Agent Settings: Prompts ![Prompts panel showing System Prompt, Proactive Prompt, Study Prompt, and Guided Prompt cards, each with its content preview, Edit and Copy buttons, and Active/Inactive toggles](/images/docs/os/agent-settings/agent_settings_prompt.webp) ## Overview The Prompts panel is where you define how an agent talks and behaves. The panel header reads: "Manage and configure prompts for your agent," and the helper text explains: "This is where you shape how your agent talks and behaves — its personality, tone, and the way it guides each conversation. Just write in plain language, like you're briefing a new teammate." The panel manages four named prompts — **System Prompt**, **Proactive Prompt**, **Study Prompt**, and **Guided Prompt** — each shown as a card with a content preview and an **Edit** and **Copy** button. The Proactive and Guided prompts additionally carry an **Active/Inactive** toggle. Below these cards, the panel also manages **Suggested Prompts** (quick-access prompts users can run), with an **Add New Prompt** button and Run/Delete actions per prompt. To reach this screen, open the **Edit Agent** modal, stay on the **Configurations** tab group, and select **Prompts** in the left sidebar. ## Target Audience **Administrator** | **Agent Builder** ## Prompts Reference #### System Prompt The core instruction set for the agent — its tooltip reads "Define the agent's behavior." Whatever you write here governs every reply (the screenshot example instructs a tutoring persona: answer quickly and concisely, offer to go in depth or explain with an example). Click **Edit** to change the prompt text and **Copy** to copy it to the clipboard. #### Proactive Prompt Controls how the agent opens a conversation — its tooltip reads "Guide the conversation flow." The example content reads: "The user has entered the chat session. Based on the conversation history, initiate interaction with the user to keep the conversation going." The **Active/Inactive** toggle switches the agent's greeting method: when Active, the agent uses this prompt to proactively start the conversation; when Inactive, it does not. #### Study Prompt Defines the agent's behavior when Study Mode is active — its tooltip reads "Define behavior when Study Mode is active." The screenshot shows a study-mode instruction that enforces "strict rules" during a study chat. Edit it to control how the agent behaves as a study companion rather than an answer engine. #### Guided Prompt Controls generation of suggested follow-up prompts — its tooltip reads "Guide the user interaction." The example content reads: "Generate suggested prompts for the user based on the conversation." Its **Active/Inactive** toggle turns guided prompts on or off for this agent (shown Active in the screenshot); when on, the agent proposes clickable next prompts to the user during a chat. #### Suggested Prompts Further down the panel (below the four cards), the **Suggested Prompts** section lists reusable prompts users can launch with one click. Each entry has **Run** and **Delete** actions, an **Add New Prompt** button creates new ones, and **See More** pages through the list six at a time. #### Edit and Copy Every prompt card has **Edit** (opens an editing dialog for that prompt; saving shows "Prompt updated successfully" or "Agent updated successfully") and **Copy** (copies the prompt text to the clipboard). ## How to Use #### Step 1: Open the Prompts panel Open the **Edit Agent** modal, keep **Configurations** selected, and click **Prompts** in the sidebar. #### Step 2: Write the System Prompt Click **Edit** on the **System Prompt** card and describe the agent's role, tone, and rules in plain language. This is the foundation every other prompt builds on. #### Step 3: Decide how conversations start Toggle **Proactive Prompt** to Active if the agent should speak first when a user enters a chat, and edit its text to control that opening move. Leave it Inactive if users should always start the conversation. #### Step 4: Configure Study and Guided behavior Edit the **Study Prompt** if the agent will be used in Study Mode. Toggle **Guided Prompt** to Active to have the agent generate suggested prompts for users during conversations. #### Step 5: Add Suggested Prompts Scroll down to **Suggested Prompts** and use **Add New Prompt** to create quick-start prompts users can run with one click. Use **Run** to test one directly in chat. --- ## Agent Settings: Safety URL: https://ibl.ai/docs/os/agent-settings/safety # Agent Settings: Safety ![Safety panel showing the View Flagged Prompts button, a Moderation Prompt card toggled Active, a Safety Prompt card toggled Inactive, and Moderation Response and Safety Response cards, each with Edit and Copy buttons](/images/docs/os/agent-settings/agent_settings_safety.webp) ## Overview The Safety panel configures the moderation guardrails for an agent. Its description reads: "Configure safety and moderation settings," and the intro banner explains the intent: "Set the guardrails that keep conversations appropriate. Decide how your agent handles risky or off-limits topics and what it says when someone crosses the line — so it stays safe and on-brand." Two independent checks are configured here. The **Moderation Prompt** screens incoming user prompts for inappropriate content, and the **Safety Prompt** screens the AI model's own messages before they reach the user. Each has a companion response — the message shown in chat when content is flagged. To reach this panel, open the **Edit Agent** modal, stay on the **Configurations** tab group, and select **Safety** in the left sidebar. ## Target Audience **Administrator** | **Agent Builder** ## Settings Reference #### View Flagged Prompts A button in the top-right that opens the Flagged Prompts modal — a review surface for prompts the moderation system has flagged, with a summary, filters, a paginated list, per-prompt detail, and the ability to delete individual moderation log entries. The button only appears for users whose role grants the view-moderation-logs permission on the agent. #### Moderation Prompt The instruction given to the moderation check that classifies **user prompts** as appropriate or inappropriate. The default text reads: "You are a moderator tasked with identifying whether a prompt from a user is appropriate or inappropriate. Any prompt that is immoral or contains abusive words, insults, query that involve damaging content, and law breaking acts, etc should be deemed inappropriate. Otherwise it is deemed appropriate." An **Active/Inactive** toggle in the card header enables or disables moderation for the agent; the tooltip notes it "Controls Content Moderation." #### Safety Prompt The instruction for the check that classifies **AI model messages** before they are shown to the user. The default text reads: "You are a moderator tasked with identifying whether a message from an ai model to a user is is appropriate or inappropriate. If the message is immoral or contains abusive words, insults, damaging content, and law breaking acts, etc it should be deemed inappropriate. Otherwise it is deemed appropriate." Its own **Active/Inactive** toggle enables or disables the safety system; the tooltip notes it "Controls Safety Filtering." #### Moderation Response The message shown in chat when a **user prompt** is flagged. Default: "Please keep the conversation within the bounds of what the agent is tasked to do and per your platform's rules." #### Safety Response The message shown when the **AI model's output** is flagged. Default: "Sorry, the AI model generated an inappropriate response. Kindly try a different prompt." #### Edit and Copy Every card has an **Edit** button that opens a prompt editor for that text, and a **Copy** button that copies the current text to the clipboard. Changes save to the agent's settings immediately on confirmation, and controls are disabled for users without edit permission on the corresponding field. ## How to Use #### Step 1: Open the Safety panel Open the **Edit Agent** modal, keep **Configurations** selected, and click **Safety** in the sidebar. #### Step 2: Enable the checks you need Use the **Active/Inactive** toggle on the Moderation Prompt card to screen user prompts, and the toggle on the Safety Prompt card to screen AI responses. The two operate independently. #### Step 3: Tailor the prompts Click **Edit** on either prompt card to adjust what counts as inappropriate for this agent — for example, adding topics that are off-limits for your organization. Save the editor to apply. #### Step 4: Customize the user-facing responses Click **Edit** on the Moderation Response or Safety Response cards to change the message users see when content is flagged, keeping it consistent with your brand's tone. #### Step 5: Review flagged activity Click **View Flagged Prompts** to audit what has been flagged, filter the list, inspect individual prompts, and delete log entries where appropriate. --- ## Agent Settings: Sandbox URL: https://ibl.ai/docs/os/agent-settings/sandbox # Agent Settings: Sandbox ![Sandbox panel in the Edit Agent modal with the sandbox enable toggle, an instance search box, an Add Instance button, and a table of sandbox instances showing name, URL, type, status, health, version, last check, and Connect buttons](/images/docs/os/agent-settings/agent_settings_sandbox.webp) ## Overview The Sandbox panel gives an agent its own secure execution workspace on independent infrastructure: somewhere it can run code, tools, and skills on your behalf rather than only answering from a context window. The panel opens on a **Sandbox Type** card offering three sandbox kinds: The card's subheading reads: "Choose how this agent runs code. Only one sandbox type can be enabled at a time." | Kind | What it gives the agent | |---|---| | **Computing Runtime** | A lightweight JavaScript calculator for quick computations — the low-cost option. Nothing to register and no network settings of its own. | | **Virtual Machine Shell** | A full Linux virtual machine, one per chat, in which the agent writes files and runs real shell commands, isolated from everything else. It starts with **no network at all**; what it may reach is set per agent. See [Network Access](#network-access-virtual-machine-shell). | | **Claw** | A dedicated, persistent agent host with its own skills and plugins, billed by usage and configured through its workspace files. You register an `openclaw` or `ironclaw` instance by URL and connect the agent to it. See [Claw instances](#claw-instances). | **The three kinds are mutually exclusive, and one of them is always active.** The card's own subheading says so: "Only one sandbox type can be enabled at a time." You change kinds by selecting a different one, which deactivates whichever kind was active in the same save. **There is no way to turn the sandbox off** — no "none" state and no disable operation. Each switch is briefly unavailable only while its own save is in flight, and a successful change reports "Sandbox type updated." The sections below the card belong to the selected kind and are **absent from the page entirely** when that kind is not active, rather than shown greyed out. To reach this screen, open the **Edit Agent** modal, switch to the **Integrations** tab group (its sidebar lists Sandbox, Access, Tools, MCP, Datasets, API, LTI, and Embed), and select **Sandbox**. The tab is always visible to administrators — there is no separate capability to switch on first, and the sandbox master toggle now lives on this tab rather than under [Capabilities](capabilities.md). ## Target Audience **Administrator** | **Agent Builder** ## Network Access (Virtual Machine Shell) While **Virtual Machine Shell** is the active kind, the panel renders a **Network Access** section. It is a draft editor: nothing takes effect until you click **Save Changes**, which stays unavailable while the draft is unchanged or invalid. #### Egress Profile A radio group choosing what the VM may reach: | Profile | What the VM can reach | |---|---| | **No Network** (default) | No network at all. | | **Package Registries** | Package registries only — PyPI, npm, apt and apk. | | **Public Internet** | The public internet, with private ranges, loopback and cloud metadata addresses denied. | | **Custom Allowlist** | Deny by default: only the hosts in the network policy you select. | #### Network Policy A policy picker that appears **only under Custom Allowlist**, where it is required — leaving it empty shows "The Custom profile needs a network policy." **Create Policy** opens the policy form in place, **Edit Policy** reopens the chosen one, and **Manage Policies** goes to the organization-level list described in [Organization settings](#organization-settings-network-policies-and-secrets). #### Secrets A multi-select of VM secrets to bind to this agent, one checkbox per secret's environment variable. It appears **only under Public Internet or Custom Allowlist**, and is capped at **20** bound secrets. A bound secret lets the agent **call an API with a key it can never read**: inside the VM the environment variable holds a placeholder, and the real value is substituted only on encrypted requests to the hosts that secret is allowed to reach. The agent cannot print, log or leak it. #### Two rules the panel enforces before it saves - **Narrowing with secrets bound.** Moving to No Network or Package Registries while secrets are bound opens an **"Unbind Secrets?"** confirmation and unbinds them in the same request. - **Uncovered hosts under Custom.** Every host a bound secret needs must be covered by the selected policy. When one is not, the panel lists the gaps and offers **"Add Hosts to {policy} and Save"**, which patches the policy first and then saves. #### Billing notice VM time is a metered resource, so the section carries a billing notice. Time is charged to the credits of the person chatting, **prorated per second**, at **$1 per ten minutes** by default — a figure each organization sets for itself, and which can be set to zero. Each session's cost is recorded with the rest of the agent's usage, alongside its model calls. ## Organization settings: network policies and secrets Network policies and VM secrets are **organization-level** objects, written once and reused across agents and never shared across organizations. An agent's Network Access section only selects from them. They live in the organization's **Account** settings, under the **Virtual Machine** tab, which is **listed for administrators only**, and are documented in full in [Organization Settings: Virtual Machine](/docs/os/organization-settings/virtual-machine). Creating, changing and deleting policies and secrets are **separate permissions**, one for each, held by organization admins by default — so either of the two sub-tabs below is hidden when your permissions do not allow reading its list. Binding a secret to an agent requires the secret-writing permission too. #### Network Policies A table of named allowlists, with create, edit, and delete. Entries are **exact `host:port` pairs — no wildcards — and at most 100 per policy**; loopback, link-local and cloud metadata addresses are refused outright. Hosts are entered as chips: type one entry and press Enter (a comma or space works too, and a pasted list is split), and a rejected entry stays in the box with the reason shown underneath instead of becoming a chip. Each chip carries its own remove button. #### Secrets A table of VM secrets. A secret's value is **never returned by any endpoint**, so the form never prefills it: on edit the value box stays blank ("Leave blank to keep the current value") and the environment-variable name is read-only. A secret either carries its own value or **points at one field of a credential the organization already stores** for an integration. Pointing at the stored credential means the key is never typed twice, and rotating it once updates every agent that uses it. ## Claw instances While **Claw** is the active kind, the panel shows the instance surface below — first the registration table, then, once the agent is wired to an instance, the connected view. Connecting an agent to an instance is what makes its skills and workspace prompts usable: the **Skills** tab is reachable either way, but skills only *run* on a wired sandbox, so until one is connected it shows a greyed "connect a sandbox" state. The Agent Configuration prompt fields (Identity, Soul, User Context, Tools, Agents, Bootstrap, Heartbeat, Memory) in the Prompts tab appear once the agent is connected. #### Search instances A search box that filters the instance table by name or URL. #### Add Instance ![New Instance dialog with fields for name, type, server URL, and gateway token](/images/docs/os/agent-settings/agent_settings_sandbox_new_instance.webp) Opens the **New Instance** dialog for registering a sandbox runtime. The form takes a display **name**, a fully qualified https **server URL**, the instance **type** (`openclaw`, the default, or `ironclaw`), and an optional **gateway token** for authentication. The token is write-only — it is never read back from the API, so editing an instance re-prompts for it and leaving the field blank keeps the existing one. #### Instance table Each registered instance is a row with: - **NAME** — the instance's display name (for example `carl_ibl_ai`). - **URL** — the instance's server URL (for example `https://carl.ibl.ai`). - **TYPE** — the runtime type, such as `openclaw`. - **STATUS** — **Active** or **Error** (an em-dash when unknown). - **HEALTH** — **Healthy** or **Unhealthy** (an em-dash when unknown). - **VERSION** — the software version reported by the instance (for example `2026.6.8`). - **LAST CHECK** — when the instance was last health-checked (for example "1 minute ago"). - **Connect** — connects this agent to the instance. Connect is blocked (dimmed, with an explanatory tooltip) when the instance is unhealthy. - **"..." actions menu** — per-instance actions including **Edit** (change name, server URL, or type), **Delete** (with confirmation), **Run checks** (health check plus connectivity test), and **Connect**. ![Per-instance actions menu offering Connect, Run checks, Edit, and Delete](/images/docs/os/agent-settings/agent_settings_sandbox_actions.webp) ![Edit Instance dialog with the name, type, and server URL pre-filled and the gateway token left blank](/images/docs/os/agent-settings/agent_settings_sandbox_edit_instance.webp) ### Connected state ![Sandbox panel after connecting, showing the Connected Instance card with name, server URL, status, health and last check, Run checks and Disconnect actions, an Auto Push on Save toggle, a Push Configuration row, and a Model row with Select Model](/images/docs/os/agent-settings/agent_settings_sandbox_connected.webp) Once the agent is connected to an instance, the instance table is replaced by the connected-instance view: #### Connected Instance card Shows the connected instance's **Name**, **Server URL** (linked), **STATUS** (for example Active), **HEALTH** (for example Healthy), and **LAST CHECK** time. Two actions sit on the card: - **Run checks** — re-runs the health check and connectivity test against the instance and reports the results. - **Disconnect** — detaches the agent from the instance, after a confirmation dialog. Disconnecting hides the sandbox-gated capabilities (Skills, agent prompts) again. #### Auto Push on Save A toggle that, when on, automatically pushes the agent's configuration to the connected instance whenever it is saved, so the runtime never drifts from what is configured in the UI. #### Push Configuration Shows when the configuration was last pushed to the instance ("Never pushed" before the first push) and a **Push** button to push the current configuration to the connected worker on demand. #### Model The LLM the sandboxed agent runs on. **Select Model** opens the provider picker, where you choose a provider (for example Anthropic or OpenAI) and then a model; once chosen, the current model identifier is shown in this row and the button changes to allow changing it. ## Agent Workspace Prompts ![Prompts section listing the agent workspace files — Identity, Soul, User Context, Tools, Agents, Bootstrap, Heartbeat, and Memory — each with an information tooltip and an Edit button](/images/docs/os/agent-settings/agent_settings_sandbox_prompts.webp) A connected agent has a workspace on the sandbox made up of eight prompt files, each editable from this panel. They are the same files an agent definition carries on disk, so what you write here is what the runtime reads. | Field | File | What it holds | |---|---|---| | **Identity** | `IDENTITY.md` | The agent's persona — name, character, how it presents itself | | **Soul** | `SOUL.md` | Behavioral guidelines, personality, communication style | | **User Context** | `USER.md` | The deployment's context — hosts, device names, voices | | **Tools** | `TOOLS.md` | Notes on tool usage, device names, API aliases | | **Agents** | `AGENTS.md` | Multi-agent routing — which agent handles what | | **Bootstrap** | `BOOTSTRAP.md` | One-time instructions for the agent's first run | | **Heartbeat** | `HEARTBEAT.md` | Periodic tasks the agent performs on its own schedule | | **Memory** | `MEMORY.md` | Seed memory — curated long-term facts the agent starts with | #### Editing a prompt ![Edit prompt dialog with a rich-text editor for one workspace file](/images/docs/os/agent-settings/agent_settings_sandbox_edit_prompt.webp) Each row carries an information tooltip explaining what the file is for and an **Edit** button that opens a rich-text editor. Saving writes the file, creating it if this is the first time it has been set. ## How to Use ### Running an agent on a virtual machine #### Step 1: Select the kind Open **Edit Agent** → **Integrations** → **Sandbox** and select **Virtual Machine Shell** in the Sandbox Type card. Selecting it deactivates whichever kind was active before. The **Network Access** section appears below. The Virtual Machine Shell, its egress profiles, network policies, credential-backed secrets and per-second billing are described for a general audience in [Agent Sandboxes: A Real Linux VM, Locked to Hosts You Allow](/updates/agent-sandbox-virtual-machines-network-policies). #### Step 2: Choose how much network the agent needs Pick the narrowest **Egress Profile** that works: **No Network** for pure computation, **Package Registries** to install dependencies, **Public Internet** for general access, **Custom Allowlist** to confine the VM to named hosts. #### Step 3: Name the hosts, if you chose Custom Allowlist Select an existing **Network Policy**, or use **Create Policy** to define one from here. Custom will not save without a policy. #### Step 4: Bind any secrets the agent needs Under Public Internet or Custom Allowlist, tick the secrets to expose to this agent, up to 20. Under Custom, every host a secret needs must be covered by the policy — if one is not, use **Add Hosts to {policy} and Save** to extend the policy as part of the save. #### Step 5: Save Click **Save Changes**. Narrowing the profile later while secrets are still bound will ask you to confirm unbinding them. ### Running an agent on a Claw instance #### Step 1: Select the kind In the Sandbox Type card, select **Claw**. The instance surface appears. #### Step 2: Register an instance Click **Add Instance**. Enter a name, the https server URL of the runtime, choose the type (`openclaw` by default), optionally provide a gateway token, and submit. The new row appears in the instance table. #### Step 3: Verify health and connect Use **Run checks** from the row's actions menu to confirm the instance is Active and Healthy, then click **Connect**. The Connected Instance card replaces the table, and the agent's **Skills** tab and Agent Configuration prompts become available. #### Step 4: Write the agent's workspace prompts In the **Prompts** section, edit the files that define the agent on the runtime — **Identity** and **Soul** first, then the rest as the deployment needs them. **Push Configuration** stays unavailable until at least one prompt has content, since there is nothing to send. #### Step 5: Keep the runtime in sync Click **Push** in **Push Configuration** to push the agent's current configuration to the instance — or enable **Auto Push on Save** so every prompt edit is pushed automatically. Use **Select Model** to set the LLM the sandboxed agent should use. #### Step 6: Disconnect when needed Click **Disconnect** on the Connected Instance card (and confirm) to detach the agent from the instance — for example before pointing it at a different runtime. Disconnecting does not turn the sandbox off; to move the agent elsewhere, select a different kind in the Sandbox Type card. --- ## Agent Settings: Skills URL: https://ibl.ai/docs/os/agent-settings/skills # Agent Settings: Skills ![Skills panel showing the Agent Skills tab with the New Skill button and two skill rows, Image Creation v1.0.0 and Web Research v1.0.0, each with an enable toggle and an overflow actions menu](/images/docs/os/agent-settings/agent_settings_skills.webp) ## Overview The Skills panel manages **Agent Skills** — reusable playbooks a Base Agent can discover and follow. A skill is a written instruction bundle (plus optional reference files) for one job, such as researching a topic on the web or reviewing code. The agent reads a skill only when it is relevant, so an agent can carry many capabilities without bloating every conversation. The panel header reads: "Reusable playbooks this Base Agent can discover and follow." The panel is split into two tabs — **Agent Skills** (the set this agent carries, with enable/disable toggles) and **Available Skills** (the organization's full catalog, with one-click **Add to Agent**) — plus New/Edit Skill dialogs and a **Resources** file manager for attaching files to a skill. Skills are managed independently of the Claw sandbox: no sandbox instance is required for the panel to work. In chat, users invoke a skill by typing `/` in the composer. To reach this screen, open the **Edit Agent** modal, stay on the **Configurations** tab group, and select **Skills** in the left sidebar. Agent Skills apply to **Base Agent** agents only. On other agent types the tab is not offered. ## Target Audience **Administrator** | **Agent Builder** ## Panel Reference #### Session behavior note An info line at the top of the panel states: "Skills added or removed here apply to new chat sessions only. Edits to a skill's instructions apply immediately, including in conversations already in progress." Plan changes accordingly — attaching a skill mid-conversation will not affect that conversation. #### New Skill Opens the skill-creation dialog (see [New Skill dialog](#new-skill-dialog) below). Available from either tab. #### Agent Skills tab The agent's *effective* set: the skills assigned to it plus its own private skills, deduped by slug. Each row shows the skill's name, version, badges (category, Native, Featured, Private), and description, followed by an enable toggle and a kebab ("...") menu. #### Available Skills tab ![Available Skills tab listing the organization's catalog, with green Added chips on skills already attached to this agent](/images/docs/os/agent-settings/agent_settings_skills_available.webp) The organization's full skill catalog, paged 10 at a time. Rows show the same name/version/badges/description block. **Add to Agent** attaches a skill to this agent; rows already covered by the agent's set — attached, or shadowed by a private skill with the same slug — show a green **Added** chip instead. Another agent's private skills are not attachable. #### Enable toggle Turns a skill on or off for this agent. A skill is active only when both the skill itself and its assignment to this agent are enabled, and only enabled skills appear in the chat `/` picker. #### Kebab ("...") menu ![Skill row kebab menu open with Remove from Agent, Edit, and Delete actions](/images/docs/os/agent-settings/agent_settings_skills_actions.webp) Per-row actions: **Remove from Agent** detaches the skill from this agent (shown for assigned skills); **Edit** opens the Edit Skill dialog; **Delete** removes the skill from the organization. Edit and Delete appear only for skills your organization owns — **Featured skills are read-only** and their edit and delete actions are hidden. #### New Skill dialog ![New Skill dialog with an Only This Agent toggle and fields for Name, Slug, Version, Category, Description, and Instruction](/images/docs/os/agent-settings/agent_settings_skills_new.webp) - **Only This Agent** — "Private skills are available to this agent only and take precedence over platform skills with the same slug." Leave it off to create a skill the whole organization can use. - **Name** and **Slug** are required. The slug is what users type after `/` in chat. - **Version** defaults to `1.0.0`; **Category** (for example web, code, data) and **Description** are optional. - **Instruction** is the playbook the agent follows when the skill is used. Edits to it apply immediately, including in conversations already in progress. #### Edit Skill dialog — General ![Edit Skill dialog on the General tab showing the saved Name Image Creation and Slug image-creation](/images/docs/os/agent-settings/agent_settings_skills_edit_general.webp) The same fields as New Skill, pre-filled, under a **General** / **Resources** tab pair. **Save** writes the change organization-wide, not just for this agent. #### Edit Skill dialog — Resources ![Edit Skill dialog on the Resources tab with a New Resource button and a course_spec.example.yaml file tagged Reference](/images/docs/os/agent-settings/agent_settings_skills_edit_resources.webp) Optional files the agent can use with the skill, attachable after the skill is created. **Reference** and **Script** resources are text files (filename plus content); **Asset** resources are uploaded binary files. Each row shows the filename and a type chip, with a kebab menu offering **Download** (assets), **Edit** (text files), and **Delete**. #### Chat `/` skill picker ![Chat composer with a slash typed, showing a picker listing Image Creation /image-creation and Web Research /web-research above the input](/images/docs/os/agent-settings/agent_settings_skills_slash_picker.webp) In chat, typing `/` as the first word of a message opens a picker listing this agent's enabled skills by name and `/slug`. Arrow keys browse, Enter or Tab selects and inserts `/slug ` into the composer, and Esc dismisses it. See [Chat Interface](../chat-canvas/chat.md). ## How to Use #### Step 1: Open the Skills panel Open the **Edit Agent** modal, keep **Configurations** selected, and click **Skills** in the sidebar. #### Step 2: Attach skills from the catalog Open the **Available Skills** tab and click **Add to Agent** on each skill this agent should carry. Skills already covered show a green **Added** chip. #### Step 3: Create a skill (if needed) Click **New Skill**, fill in at least **Name** and **Slug**, write the **Instruction** playbook, and save. Leave **Only This Agent** off to share the skill across the organization, or turn it on to keep it private to this agent. #### Step 4: Attach files to a skill Open the skill's **Edit** dialog, switch to **Resources**, and click **New Resource**. Add references and scripts as text, or upload assets as files. #### Step 5: Enable, disable, and detach Use the toggle on the **Agent Skills** tab to turn a skill on or off for this agent, or **Remove from Agent** in the kebab menu to detach it entirely. Remember that **Edit** and **Delete** apply organization-wide. #### Step 6: Use the skill in chat Start a new chat session with the agent, type `/`, and pick the skill from the list. Additions and removals apply to new sessions only; instruction edits take effect immediately. --- ## Agent Settings: Support URL: https://ibl.ai/docs/os/agent-settings/support # Agent Settings: Support ![Support panel in the Edit Agent modal showing the enable toggle, a user search and status filter, a list of support tickets with status badges, and a detail pane with the ticket subject, status selector, and requester message](/images/docs/os/agent-settings/agent_settings_support.webp) ## Overview The Support panel is where a human team reviews and answers the requests people raise while chatting with an agent. The panel header reads "Support" with the subtitle "Review and respond to support requests submitted for this agent," and a helper banner explains: "Support lets people chatting with this agent hand the conversation over to a human. Each request shows up here as a ticket you can review, reply to, and resolve. Use the toggle to make the option available to your users." When a user asks the agent for a human mid-conversation, the agent's human-support tool files a **ticket** — there is no way to create a ticket by hand from this panel. Each ticket captures who raised it, the chat session it came from, an agent-authored subject and description, and a status that moves through **Open → In Progress → Closed**. The panel lists those tickets, lets you filter them by user and status, and opens each one in a detail pane where you can read the request, change its status, and reply as the support team. To reach this screen, open the **Edit Agent** modal, switch to the **Runtime** tab group (its sidebar lists Tasks, Memory, History, Support, Audit, and Analytics), and select **Support**. ## Target Audience **Administrator** | **Support Team** | **Agent Builder** ## Panel Reference #### Enable Support toggle The switch in the helper banner turns human escalation on or off for this agent. While it is on, users chatting with the agent can hand the conversation to a human and their requests arrive here as tickets; while it is off, the escalation option is hidden from users. #### Search for User A searchable dropdown that filters the ticket list to a single requester. Org admins see every ticket raised with the agent; a non-admin sees only the tickets they raised themselves. #### All Statuses A dropdown that filters the ticket list by status — **Open**, **In Progress**, or **Closed** — defaulting to **All Statuses**. #### Ticket list Each ticket card shows a relative timestamp (for example "6 minutes ago"), the requester's email, the ticket subject, a preview of the description, and a colored status badge (**Open**, **In Progress**, or **Closed**). Selecting a card opens it in the detail pane. The list paginates when there are many tickets. #### Ticket detail pane The right-hand pane shows the selected ticket: its subject, a status badge, the requester's identity and a relative timestamp, and a **Status** selector for changing the ticket's state. Below that, the **Request** section renders the agent-authored description — often formatted HTML or Markdown, not plain text — followed by the conversation thread and a box for posting a reply. On a narrow screen there is no room for a second column, so selecting a ticket opens the same detail in a dialog over the list instead of beside it. ![Ticket detail pane showing the ticket subject and status badge, the requester and timestamp, the Status selector, and the Request section with the agent-authored description](/images/docs/os/agent-settings/agent_settings_support_ticket_detail.webp) #### Status selector A dropdown on the ticket detail that moves the ticket between **Open**, **In Progress**, and **Closed**. Choosing **Closed** resolves the ticket and records when it was resolved. #### Conversation and reply box Below the request, the **Conversation** lists the thread oldest-first, distinguishing the requester's messages from the support team's. A textarea and a **Send Reply** button sit beneath it. A closed ticket shows a notice in place of the reply box — "Set it back to Open or In Progress to reply" — so reopening is a deliberate step rather than a side effect of answering. ![Ticket detail with the conversation thread and the reply textarea and Send Reply button below it](/images/docs/os/agent-settings/agent_settings_support_reply.webp) ## How to Use #### Step 1: Turn on human support In the **Edit Agent** modal, open the **Runtime** tab group and select **Support**. Switch the toggle in the helper banner on so users chatting with the agent can escalate to a human. Tickets they raise then appear in the list. #### Step 2: Find the ticket to work Use **Search for User** to narrow to one requester, or the **All Statuses** dropdown to show only **Open** tickets that still need a first reply. Scan the cards for the subject, timestamp, and status badge. #### Step 3: Read the request Click a ticket card to open it in the detail pane. Read the agent-authored description in the **Request** section and the existing conversation thread to understand what the user needs. #### Step 4: Reply as the support team Post a reply from the detail pane. Your response is recorded as a support-team message on the ticket's thread, distinct from the requester's own replies. #### Step 5: Move the ticket through its lifecycle Use the **Status** selector to set the ticket to **In Progress** while you work it, then to **Closed** once it is resolved — closing stamps the resolution time so you can tell handled tickets from open ones at a glance. ## Automating Support via the API Everything in this panel is also available over the platform API, so a support team can triage and answer tickets from their own tools or an agent of their own. Tickets hang off `https://api.iblai.app/dm/api/ai-mentor/orgs/{org}/users/{username}`, authenticated with an `Authorization: Api-Token` header: - **List and filter tickets** — `GET .../support-tickets/` with `mentor_id`, `status`, `username`, and `session` filters, plus `page` and `page_size`. - **Read one ticket** — `GET .../support-tickets/{id}/`. - **Read a conversation thread** — `GET .../support-ticket-messages/?ticket={id}`; sort by timestamp and match `sender` against the ticket's requester to tell requester replies from support replies. - **Reply on a ticket** — `POST .../support-ticket-messages/` with `{ "ticket": id, "message": "..." }`. - **Change status** — `PATCH .../support-tickets/{id}/` with `{ "status": "in_progress" }`. - **Close a ticket** — `POST .../support-tickets/{id}/close/` (no body); this sets the status to closed and stamps the resolution time in one call. There is no create endpoint — tickets originate only from agent chats — so to test the flow end to end, enable the human-support tool, ask the agent to escalate, then triage the resulting ticket. The reusable API skill for this workflow is [`iblai-api-agent-support`](https://github.com/iblai/vibe/blob/main/skills/agents/iblai-api-agent-support/SKILL.md). ## Building Support Into Your Own App The Support panel is one of the agent-settings tabs published in the ibl.ai SDK, so the same inbox can be mounted in a product you build yourself. Install the [iblai/vibe](https://github.com/iblai/vibe) skills and mount `<AgentHumanSupportTab>` from `@iblai/iblai-js/web-containers/next` inside an `AgentSettingsProvider`; every label is overridable through a `labels` prop, and pagination can be swapped for your own component. The reusable skill for this workflow is [`iblai-vibe-agent-support`](https://github.com/iblai/vibe/tree/main/skills/iblai-vibe-agent-support), and the SDK overview is at [Vibe SDK](/developer/platform/vibe-sdk). --- ## Agent Settings: Tasks URL: https://ibl.ai/docs/os/agent-settings/tasks # Agent Settings: Tasks ![Tasks panel in the Edit Agent modal with a task search box, Select date filter, Schedule Task button, metric cards for Total Tasks, Completed and Failed, a list of scheduled tasks, and a Task Logs pane](/images/docs/os/agent-settings/agent_settings_tasks.webp) ## Overview The Tasks panel schedules work an agent performs automatically, without anyone prompting it. The panel header reads: "Configure automated tasks for your agent," and the helper banner explains: "Let your agent work on its own schedule. Set up recurring tasks it runs automatically — like daily summaries or reminders — without anyone having to ask." Each task is a named prompt with a start date and time and an optional repeat cadence. The panel tracks outcomes with three metric cards — **Total Tasks**, **Completed**, and **Failed** — and shows a per-task run log so you can verify what happened on each run. Task rows carry a status badge (for example "Scheduled") and can be deleted with the trash icon. To reach this screen, open the **Edit Agent** modal, switch to the **Runtime** tab group (its sidebar lists Tasks, Memory, History, Audit, and Analytics), and select **Tasks**. ## Target Audience **Administrator** | **Agent Builder** ## Panel Reference #### Search all tasks A search box that filters the task list by name. Filtering is debounced, so results update shortly after you stop typing; clearing the box restores the full list. #### Select date A date filter that narrows the task list to tasks for a chosen date. #### Schedule Task ![Schedule Task dialog with task name, task prompt, date, time, repeat cadence, and email notification fields](/images/docs/os/agent-settings/agent_settings_tasks_create.webp) Opens the **Schedule Task** dialog for creating a new automated task. The dialog contains: - **Task Name** — the display name for the task. - **Task Prompt** — the instruction the agent executes when the task runs. - **Date** — a calendar for picking the start day (defaults to today; past days are disabled). - **Time** — the time of day the task runs. The start time must be in the future, otherwise the dialog blocks submission. - **Repeat** — the cadence: **Don't repeat**, **Daily**, **Weekly**, or **Monthly**. - **Notify by Email** — an option to receive an email notification about the task. - **Schedule** / **Cancel** — submit the task, or dismiss the dialog without saving. #### Metric cards Three summary cards across the top of the list: - **Total Tasks** — how many tasks exist for this agent. - **Completed** — how many task runs finished successfully. - **Failed** — how many task runs failed. #### Task list Each row shows the task name (for example "Generate Lesson Content"), its schedule ("12:00 PM - Repeats Once"), a status badge such as **Scheduled**, and a trash icon to delete the task (with confirmation). The caption above the list reads: "Select a task to view its run logs." #### Task Logs The right-hand pane shows the run logs of whichever task is selected in the list. Until a task is selected it reads: "Select a task on the left to view its run logs." ![Task Logs pane listing the runs of a selected task with their status and timestamps](/images/docs/os/agent-settings/agent_settings_tasks_logs.webp) ![An expanded run log showing the detail of a single task run](/images/docs/os/agent-settings/agent_settings_tasks_log_details.webp) ## How to Use #### Step 1: Open the Tasks panel In the **Edit Agent** modal, select the **Runtime** tab group, then click **Tasks** in the sidebar. #### Step 2: Schedule a task Click **Schedule Task**. Give the task a name and a prompt (what the agent should do), pick the start date and a future time, choose a repeat cadence — **Don't repeat**, **Daily**, **Weekly**, or **Monthly** — optionally enable **Notify by Email**, and click **Schedule**. The task appears in the list with a **Scheduled** badge. #### Step 3: Monitor runs Watch the **Total Tasks**, **Completed**, and **Failed** cards for outcomes. Click a task in the list to open its run logs in the **Task Logs** pane and verify what each run did. #### Step 4: Find or remove tasks Use the search box or the **Select date** filter to locate a task. Click the trash icon on a row to delete a task you no longer need. --- ## Agent Settings: Tools URL: https://ibl.ai/docs/os/agent-settings/tools # Agent Settings: Tools ![Tools panel listing toggles for Wikipedia Search, Course Creation, Google Calendar, Video Generation, MCP, and Grading, with Course Creation enabled](/images/docs/os/agent-settings/agent_settings_tools.webp) ## Overview The Tools panel enables or disables the built-in tools an agent can call during a conversation. The panel header reads: "Configure tools and integrations for your agent," and the helper text explains: "Give your agent hands. Tools let it do things beyond chatting — look something up, call an API, trigger an action — so it can actually get work done for people." Each tool is a row with a name, an info tooltip describing what it does, and an on/off toggle. The tool catalog is served by the platform, so the exact list can vary by organization; the screenshot shows **Wikipedia Search**, **Course Creation** (enabled), **Google Calendar**, **Video Generation**, **MCP**, and **Grading**. Toggling a tool updates the agent's enabled-tools list immediately — there is no separate save step. To reach this screen, open the **Edit Agent** modal, switch to the **Integrations** tab group, and select **Tools** in the left sidebar. ## Target Audience **Administrator** | **Agent Builder** ## Tools Reference #### Wikipedia Search Lets the agent look up information on Wikipedia during a conversation. Shown off in the screenshot. #### Course Creation Lets the agent create course content — the enabled tool in the screenshot, fitting the "Course Creator" agent being edited. With it on, the agent can generate and assemble courses from chat. #### Google Calendar Connects the agent to Google Calendar actions. Shown off in the screenshot. #### Video Generation Lets the agent generate video content. Shown off in the screenshot. #### MCP Lets the agent call the Model Context Protocol connectors configured on the **MCP** panel. Turning this on is what allows connected MCP servers to be used inside conversations. Shown off in the screenshot. #### Grading Lets the agent perform grading tasks. Shown off in the screenshot. #### Info tooltips The info icon next to each tool shows the tool's description as provided by the platform, so you can confirm exactly what a tool does before enabling it. ## How to Use #### Step 1: Open the Tools panel Open the **Edit Agent** modal, click the **Integrations** tab group at the top of the sidebar, then select **Tools**. #### Step 2: Review the available tools Read each tool's info tooltip to understand what it lets the agent do. The catalog you see is the set of tools your platform makes available. #### Step 3: Toggle tools on Switch on each tool the agent should be able to use — for example, **Course Creation** for a course-building agent. The change is applied to the agent immediately. #### Step 4: Toggle tools off Switch off any tool the agent should no longer call. Keeping the enabled set minimal keeps the agent focused and predictable. --- ## Agent Settings: Voice Call URL: https://ibl.ai/docs/os/agent-settings/voice-call # Agent Settings: Voice Call ![Voice call configuration sub-tab showing Call style set to Live conversation, Spoken language set to English, AI provider set to OpenAI, a call voice picker, and Reset and Save changes buttons](/images/docs/os/agent-settings/agent_settings_voice_call.webp) ## Overview The Voice call sub-tab configures how live voice calls with an agent behave — the conversation style, the spoken language, the AI provider that powers the call, and the voice used on calls. Its helper text states: "Customize how voice calls work. Screen sharing always uses live conversation." Voice calls are real-time WebRTC sessions powered by LiveKit. An info banner explains the two call styles: "Live conversation streams the call end-to-end and feels more natural. Step-by-step mode transcribes the user, has the agent think, then speaks — slower, with more time between turns. Screen sharing always uses live conversation." To reach this screen, open the **Edit Agent** modal, select **Voice** in the Configurations sidebar, enable the voice toggle at the top, and switch to the **Voice call** sub-tab. Settings on this sub-tab are saved as a call configuration, separate from the chat voice chosen on the Voice sub-tab. ## Target Audience **Administrator** | **Agent Builder** ## Settings Reference #### Call style A dropdown choosing between two modes: - **Live conversation** — streams the call end-to-end for a natural, low-latency exchange. - **Step-by-step** — transcribes the user's speech, lets the agent think, then speaks the reply; slower, with more time between turns. Screen sharing sessions always use live conversation regardless of this setting. #### Spoken language A dropdown selecting the language the call is conducted in (English in the screenshot). #### AI provider A dropdown selecting which provider powers the call (OpenAI in the screenshot; OpenAI, Google, and Anthropic are the configurable provider options). Choosing a provider also determines which voices are available in the call voice picker below. #### Voice Labeled "The voice your agent uses on calls." Clicking **Select a voice** opens the same searchable voice picker used on the Voice sub-tab, scoped to the selected AI provider. The picker only appears once an AI provider has been chosen. #### Additional step-by-step options The call configuration also supports **Text-to-speech provider** and **Speech-to-text provider** selections (OpenAI, Google, or ElevenLabs); these are disabled when Call style is Live conversation, since live mode streams end-to-end. Toggles for **"Look things up only when needed"** (function calling during calls) and **"Allow screen sharing on a call"** are also part of the call configuration. #### Reset and Save changes **Reset** discards unsaved edits to the call configuration. The save button persists the configuration — it reads **Save changes** when updating an existing configuration (as in the screenshot) and **Save** when creating the first one. ## How to Use #### Step 1: Open the Voice call sub-tab In the **Edit Agent** modal, go to **Configurations → Voice**, make sure the voice toggle at the top is on, then click the **Voice call** sub-tab. #### Step 2: Choose a call style Pick **Live conversation** for natural, streamed calls, or **Step-by-step** if you prefer transcribe-think-speak turns. Remember that screen sharing always uses live conversation. #### Step 3: Set the language and provider Select the **Spoken language** for calls and the **AI provider** that should power them. #### Step 4: Pick the call voice Click **Select a voice** and choose the voice the agent uses on calls; you can search and preview samples in the picker. #### Step 5: Save Click **Save changes** to persist the call configuration, or **Reset** to discard your edits. --- ## Agent Settings: Voice Selector URL: https://ibl.ai/docs/os/agent-settings/voice-selector # Agent Settings: Voice Selector ![Select OpenAI voice dialog listing nine voices — Alloy, Ash, Coral, Echo, Fable, Nova, Onyx, Sage, and Shimmer — each with a play button, above a voice search field](/images/docs/os/agent-settings/agent_settings_voice_selector.webp) ## Overview The voice selector is a modal dialog for choosing the specific voice an agent speaks with. It opens when you click **Select a voice** on the Voice panel of the Edit Agent modal, after picking OpenAI or Google as the voice source. The dialog title reflects the active source — "Select OpenAI voice" in the screenshot. Its subtitle summarizes the workflow: "Search, browse, and listen to a sample before you pick." Every voice row includes an inline play button so you can audition a voice before committing to it. To reach it, open the **Edit Agent** modal, select **Voice** in the Configurations sidebar, choose the **OpenAI** or **Google** voice source on the Voice sub-tab, then click the **Select a voice** field. The same picker is used for the call voice on the Voice call sub-tab once an AI provider is chosen. ## Target Audience **Administrator** | **Agent Builder** ## Dialog Reference #### Search voices A search input at the top ("Search voices...") filters the list as you type. Typing is debounced (about 300 ms), so results update shortly after you stop typing. Long voice lists are paginated, which matters most for the larger Google catalog. #### Voice list Voices display as a two-column grid of rows, each showing a speaker icon and the voice name. For the OpenAI source, the visible voices are **Alloy, Ash, Coral, Echo, Fable, Nova, Onyx, Sage,** and **Shimmer**. Rows behave as a radio group — clicking a row selects that voice, and only one voice can be selected at a time. #### Play (preview) buttons Each row carries a play button on its right edge. Clicking it plays a short audio sample of that voice without selecting it, so you can compare several voices before picking one. #### Close button The X in the top-right corner dismisses the dialog without changing the current selection. ## How to Use #### Step 1: Open the picker On the Voice panel (Configurations → Voice), select the **OpenAI** or **Google** voice source and click **Select a voice**. #### Step 2: Find a voice Browse the list or type a name into **Search voices...** to filter it. #### Step 3: Listen to samples Click the play button next to any voice to hear how it sounds. Repeat for a few candidates to compare. #### Step 4: Select and save Click the voice row you want — it becomes the selected voice and the picker's trigger on the Voice panel will show its name. Back on the Voice panel, click **Save voice** to persist the choice. --- ## Agent Settings: Voice URL: https://ibl.ai/docs/os/agent-settings/voice # Agent Settings: Voice ![Voice settings panel in the Edit Agent modal, showing the voice enablement toggle, the Voice and Voice call sub-tabs, three voice source cards (Browser, OpenAI, Google), and a voice picker](/images/docs/os/agent-settings/agent_settings_voice.webp) ## Overview The Voice panel controls whether an agent can speak, which voice it speaks with, and how voice calls behave. Its header describes it simply: "Choose the voice your agent uses and how voice calls work." When voice is enabled, users can talk to the agent out loud and hear it reply, like a phone call. The panel is split into two sub-tabs. The **Voice** sub-tab (documented on this page) selects the voice the agent uses to read out replies in chat, while the **Voice call** sub-tab configures how live voice calls behave. Voice calls run as real-time WebRTC sessions powered by LiveKit. To reach this panel, open the **Edit Agent** modal for any agent, stay on the **Configurations** tab group, and select **Voice** in the left sidebar. The sidebar also lists Settings, LLM, Screen Share, Prompts, Skills, Safety, Privacy, and Disclaimers. ## Target Audience **Administrator** | **Agent Builder** ## Settings Reference #### Voice enablement toggle The toggle at the top of the panel sits next to the text: "Let people talk to this agent out loud and hear it reply, like a phone call. When on, pick the voice and fine-tune how calls behave below." Turn it on to expose the voice and call options; the sub-tabs below let you pick the voice and adjust call behavior. #### Voice / Voice call sub-tabs Two pill-style sub-tabs switch between voice selection and call configuration. **Voice** covers "The voice your agent uses to read out replies in chat." **Voice call** covers call style, spoken language, provider, and call voice — see the Voice Call page for details. #### Voice source Three selectable cards choose where the agent's speech comes from: - **Browser** — "Speak through the user's own device. No setup needed." Uses the built-in speech synthesis of the user's browser, so no voice picker appears for this source. - **OpenAI** — "High-quality voices from OpenAI." Selecting this source reveals a searchable voice picker below. - **Google** — "Natural-sounding voices from Google." Also reveals a searchable voice picker for Google voices. The selected card is highlighted with a blue border (OpenAI in the screenshot). #### Voice picker ("Select a voice") When the OpenAI or Google source is selected, a **Voice** field appears with a "Select a voice" trigger. Clicking it opens a modal picker where you can search, browse, and preview voices before choosing one (see the Voice Selector page). Once a voice is saved, the trigger displays the currently selected voice, with an inline play button to preview it without opening the picker. #### Voice instructions ![Voice instructions card showing the style prompt with Edit and Copy actions, a character counter, and one-click example presets](/images/docs/os/agent-settings/agent_settings_voice_instructions.webp) Below the voice picker sits an optional **style prompt** — a free-form instruction for *how* the voice should deliver replies, as distinct from which voice says them. "Speak slowly in a warm, encouraging tone, like a patient tutor" is the shape of it. The card carries **Edit**, which opens a rich-text editor, a **Copy** action, an information tooltip, a counter that caps the prompt at 1,000 characters, and one-click example presets — *Warm and encouraging*, *Calm and measured*, *Energetic and upbeat* — for when you want a starting point rather than a blank field. ![Edit Voice Instructions modal with a rich-text editor for the style prompt](/images/docs/os/agent-settings/agent_settings_voice_instructions_edit.webp) What the instruction does depends on the source: OpenAI treats it as speech instructions, Google as a synthesis prompt. Both read it as guidance on delivery, not as content to say. #### Save voice The **Save voice** button persists your voice source, voice selection, and voice instructions to the agent's settings. It is the save action for this sub-tab only; the Voice call sub-tab has its own Reset and Save controls. ## How to Use #### Step 1: Open the Voice panel Open the **Edit Agent** modal, keep the **Configurations** tab selected, and click **Voice** in the sidebar. #### Step 2: Enable voice Turn on the toggle at the top so people can talk to the agent out loud and hear it reply. #### Step 3: Pick a voice source On the **Voice** sub-tab, click one of the three source cards: **Browser** (no further setup), **OpenAI**, or **Google**. #### Step 4: Select a voice If you chose OpenAI or Google, click **Select a voice** to open the voice picker. Search or browse the list, press a play button to hear a sample, and click a voice to select it. #### Step 5: Describe how it should speak Optionally open **Voice instructions** and write how the voice should deliver replies — pace, warmth, formality. Start from one of the example presets if it is easier to edit than to draft. The Browser source speaks through the listener's own device, so a style prompt has nothing to act on there; it applies to the OpenAI and Google sources. #### Step 6: Save Click **Save voice**. To configure how calls themselves behave (call style, spoken language, call provider and voice), switch to the **Voice call** sub-tab. ## Behavior Notes - **A voice is only sent when you pick one.** Leaving the picker untouched preserves whatever is already saved on the server rather than overwriting it — the same "absent means no change" contract applies to the voice instructions. - **Clearing an instruction is deliberate.** Emptying the field and saving clears the stored prompt; not touching it leaves the existing one in place. - **The instruction guides delivery, not content.** It shapes how replies are spoken; what the agent says is still governed by its prompts, tools, and guardrails. - **1,000 characters is the ceiling.** The counter is a hard cap, not a suggestion. --- ## Analytics: Audit URL: https://ibl.ai/docs/os/analytics/audit # Analytics: Audit ![Analytics Audit tab showing a Search for User field, a Pick a Date Range button, and an All Actions dropdown above a table with USER, ACTION, and TIME columns listing configuration changes such as Enabled claw on Settings for agentAI and Disabled LTI access on Settings for agentAI with relative timestamps](/images/docs/os/analytics/analytics_audit.webp) ## Overview The Audit tab is the change log for an agent's configuration. Every create, update, or delete made to the agent or its settings is recorded with who did it, what changed, and when — giving administrators an accountability trail for governance and troubleshooting. Entries are written in plain language. A single toggled setting reads as "Enabled ..." or "Disabled ..." (for example, "Disabled LTI access on Settings for agentAI"), other edits read as "Updated ..." with the changed fields named, and each entry ends with the agent's unique ID in parentheses so agents with the same name stay distinguishable. To reach it, open the agent in OS, switch the header toggle to **Admin**, click the analytics icon in the left sidebar, then select **Audit** in the tab bar (**Overview · Users · Topics · Transcripts · Costs · Audit**, with **Data Reports** on the right). The tab only appears for users whose role grants the view-audit-logs permission on the agent. ## Target Audience **Administrator** ## What You See #### Search for User filter A combobox that filters the log to actions performed by a specific user. Open it and pick (or type to search) the actor's identity. #### Pick a Date Range filter A calendar button that limits the log to entries between a start and end date; once set, the button shows the selected range (for example, "Jun 01 - Jun 15"). #### All Actions filter A dropdown restricting the log by action type: **All Actions** (default), **Create**, **Update**, or **Delete**. #### USER column The email address of the person who made the change. #### ACTION column A human-readable description of the change. Boolean toggles render as "Enabled {setting} on {target}" or "Disabled {setting} on {target}"; other updates render as "Updated {fields} on {target}" (such as "Updated custom CSS on Settings for agentAI"); creations and deletions render as "Created {target}" / "Deleted {target}". Setting names are humanized — for example `is_lti_accessible` appears as "LTI access" — and the target names the agent or its settings plus the agent's unique ID in parentheses. #### TIME column When the change happened, as a relative time such as "about 1 hour ago" or "15 days ago". Entries are listed newest first. #### Pagination When the log spans multiple pages, pagination controls appear below the table. ## How to Use #### Step 1: Open the Audit tab From the agent workspace in **Admin** mode, click the analytics icon in the left sidebar, then click **Audit**. If the tab is missing, your role lacks the view-audit-logs permission for this agent. #### Step 2: Scan recent changes The newest entries are at the top. Check the ACTION column to see what was changed and the USER column to see who changed it. #### Step 3: Narrow the log Use **Search for User** to isolate one administrator's actions, **Pick a Date Range** to bracket an incident window, and **All Actions** to show only creations, updates, or deletions. Filters combine. #### Step 4: Correlate with behavior changes When the agent starts behaving differently, match the timestamp of the change in this log against the symptom — for example, a "Disabled LTI access ..." entry explains why an LMS embed stopped working, and identifies exactly who to ask. --- ## Analytics: Costs URL: https://ibl.ai/docs/os/analytics/costs # Analytics: Costs ![Analytics Costs tab showing Weekly Costs, Monthly Costs, and Total Costs stat cards all at $0.00, a Cost per Day chart with a No data available empty state, and Cost by Provider and Cost by LLM chart cards below, each with Today, 7D, 30D, 90D, and Custom date-range buttons](/images/docs/os/analytics/analytics_costs.webp) ## Overview The Costs tab tracks the estimated LLM spend generated by an agent. It totals costs by week, month, and all time, then breaks spending down by day, by AI provider, by model, and by individual user. Because OS is model-agnostic, an agent may route requests to different providers and models over time; this dashboard shows exactly where the money goes. All figures are scoped to the agent selected in the header and are shown in dollars. To reach it, open the agent in OS, switch the header toggle to **Admin**, click the analytics icon in the left sidebar, then select **Costs** in the tab bar (**Overview · Users · Topics · Transcripts · Costs · Audit**, with **Data Reports** on the right). ## Target Audience **Administrator** ## What You See #### Weekly Costs card The estimated cost incurred this week, in dollars, with a percentage change versus the prior period when available. #### Monthly Costs card The estimated cost incurred this month, in dollars. #### Total Costs card The all-time estimated cost for the agent, in dollars. #### Cost per Day chart A bar chart of estimated spend per day across the selected range. When nothing was spent in the window, the card shows a "No data available" empty state (as in the screenshot). #### Cost by Provider chart A pie chart splitting spend across AI providers, so you can see at a glance which vendor accounts for what share of the agent's cost. #### Cost by LLM chart A bar chart of total cost per model (for example, spend attributed to "gpt-4o-mini" versus other models), useful for judging whether an expensive model is earning its keep. #### Cost per User table Further down the page, a table attributes spend to individual users, with columns for **User Email**, **Total Cost**, **Sessions**, and **Last Active** — the place to spot unusually heavy consumers. #### Date-range controls Each chart card has its own filter row: **Today**, **7D**, **30D** (default), **90D**, and **Custom**, which opens a calendar for arbitrary start and end dates. ## How to Use #### Step 1: Open the Costs tab From the agent workspace in **Admin** mode, click the analytics icon in the left sidebar, then click **Costs**. #### Step 2: Check the headline totals Read Weekly, Monthly, and Total Costs for the current spend picture. A rising weekly figure against a flat monthly one signals a recent usage spike. #### Step 3: Locate spend in time Use Cost per Day to see which dates drove spending, adjusting the range with **7D**, **30D**, **90D**, or **Custom** as needed. #### Step 4: Attribute spend to providers and models Compare the Cost by Provider pie and Cost by LLM bars. If one model dominates cost, consider whether a cheaper model in the agent's settings would serve as well — OS lets you switch models without rebuilding the agent. #### Step 5: Review per-user consumption Scroll to the Cost per User table to identify heavy users, correlate their **Sessions** and **Total Cost**, and follow up in the Transcripts tab to see what that usage looks like. --- ## Analytics: Data Reports URL: https://ibl.ai/docs/os/analytics/data-reports # Analytics: Data Reports ![Data Reports screen showing downloadable report cards — Chat History, My Chat History, Recommendation History Report, User Group Member List Report, User Metadata Report, and User Report — each with a description and a download button](/images/docs/os/analytics/analytics_data_reports.webp) ## Overview Data Reports is the export center of the analytics section. It presents a grid of report cards — chat histories, user rosters, and metadata extracts — each of which can be generated on demand and downloaded as a CSV file. Reports are produced server-side: clicking download queues generation, the card shows a spinner while the platform builds the file, and the finished CSV either downloads directly or opens in an in-browser CSV preview/editor before you save it. The exact set of cards comes from the platform for your organization, so it can vary by organization. To reach it, open the agent in OS, switch the header toggle to **Admin**, click the analytics icon in the left sidebar, then click **Data Reports** on the right side of the analytics tab bar (**Overview · Users · Topics · Transcripts · Costs · Audit**). ## Target Audience **Administrator** ## Available Reports #### Chat History "Get detailed mentor chat history for all participants." — a full export of the agent's conversations across every user. This report downloads directly as a CSV once generated. #### My Chat History "Download your own mentor chat history." — the same export limited to your own conversations with the agent. #### Recommendation History Report "History of course recommendations generated for learners." — a log of course recommendations the platform has produced. #### User Group Member List Report "List of users in user groups with their manager information." — group membership with each member's manager, useful for org-structured deployments. #### User Metadata Report "User information including profile metadata like company." — user records enriched with profile metadata fields. #### User Report "Basic user information including login details." — the core user roster with login information. ## Controls on Each Card #### Download button The blue download icon generates the report and delivers it. If a finished copy already exists, the button downloads it immediately; otherwise a dialog titled "Select date range (optional)" opens first, where you can pick a start and end date to scope the report — or leave it blank for the full range — then click **Generate**. #### Regenerate button Once a report has been generated, a refresh icon appears beside the download button. It rebuilds the report with the latest data (again with the optional date-range dialog), replacing the stored copy. A "Generated:" timestamp on the card shows when the current copy was produced. #### CSV preview and editing Most reports open in an in-browser CSV viewer when generation completes, so you can inspect and edit rows before saving the file. Chat History skips the preview and downloads directly. If a preview fails to load, the platform falls back to downloading the file. ## How to Use #### Step 1: Open Data Reports From the agent workspace in **Admin** mode, click the analytics icon in the left sidebar, then click **Data Reports** at the right of the tab bar. #### Step 2: Pick a report Read the card descriptions and click the download icon on the report you need. #### Step 3: Scope the date range (optional) In the "Select date range (optional)" dialog, click a start and end date on the two-month calendar, or press **Clear** to remove a selection. Click **Generate** to queue the report; the icon animates while the file is built. #### Step 4: Review and save the CSV When generation finishes, review the data in the CSV preview and save it, or — for Chat History — find the CSV in your browser downloads. #### Step 5: Refresh when data changes To pull current data later, click the regenerate (refresh) icon on the card rather than re-downloading the stored copy — the stored file is only as fresh as its "Generated:" timestamp. --- ## Analytics: Overview URL: https://ibl.ai/docs/os/analytics/overview # Analytics: Overview ![Analytics Overview dashboard showing Messages, Active Users, Topics, and Conversations stat cards above a Sessions line chart, a Topics bar chart, and an Active Users bar chart, each with Today, 7D, 30D, 90D, and Custom date-range buttons](/images/docs/os/analytics/analytics_overview.webp) ## Overview The Analytics Overview is the landing dashboard for an agent's analytics. It summarizes engagement at a glance — total messages, active users, conversation topics, and conversations — and charts sessions, topic activity, and daily active users over a selectable time window. Analytics is scoped to a single agent. Every count and chart on this screen reflects activity for the agent named in the top-left of the header (for example, "agentAI"), not the whole organization. To reach it, open the agent in OS, switch the header toggle from **User** to **Admin**, and select the analytics icon (the line chart) in the left sidebar. The Overview tab is the first of the analytics tabs: **Overview · Users · Topics · Transcripts · Costs · Audit**, with a **Data Reports** link aligned to the right of the tab bar. ## Target Audience **Administrator** ## What You See #### Messages card The total number of messages exchanged with the agent. When there is prior-period data, the card also shows a percentage change "compared to last month" — green for growth, red for decline (the screenshot shows "-50% compared to last month"). #### Active Users card The number of distinct users who have been active with this agent in the period. #### Topics card The number of conversation topics the platform has identified for this agent. Topics are labels automatically derived from what users discuss (for example, "Study"). #### Conversations card The total number of conversations (chat sessions) held with the agent. #### Sessions chart A line chart plotting the number of sessions per day across the selected date range. Hovering a point reveals the exact value for that day; dates run along the x-axis and the session count along the y-axis. #### Topics chart A horizontal bar chart of message volume per topic. Each identified topic (such as "Study") appears on the vertical axis, with the number of messages attributed to it as the bar length. #### Active Users chart A bar chart of active users per day. Each bar is the count of distinct users who interacted with the agent on that date, so spikes show exactly which days drew usage. #### Date-range controls Every chart card carries its own filter row: **Today**, **7D**, **30D** (the default), **90D**, and **Custom**, which opens a calendar for an arbitrary start and end date. Each chart can be filtered independently of the others. #### Data Reports link The right side of the tab bar links to the Data Reports screen, where the underlying data (chat history, user reports, and more) can be exported as CSV files. ## How to Use #### Step 1: Open the Overview In the agent workspace, switch the header toggle to **Admin** and click the analytics icon in the left sidebar. The Overview tab loads by default. #### Step 2: Read the headline cards Check Messages, Active Users, Topics, and Conversations for the current totals. Use the "compared to last month" percentage to judge whether engagement is trending up or down. #### Step 3: Adjust the time window Click **Today**, **7D**, **30D**, or **90D** on any chart, or click **Custom** to pick exact dates from the calendar. Each chart filters independently, so you can compare a 7-day session view against a 90-day active-user view. #### Step 4: Drill into the details Use the other tabs for depth: **Users** for per-user activity, **Topics** for subject-matter analysis, **Transcripts** to read conversations, **Costs** for spend, and **Audit** for configuration changes. Click **Data Reports** to export raw data as CSV. --- ## Analytics: Topics URL: https://ibl.ai/docs/os/analytics/topics # Analytics: Topics ![Analytics Topics tab showing Topics, Conversations, and Messages stat cards, a Conversations line chart over a 30-day window, and a Topics Details section below, each with Today, 7D, 30D, 90D, and Custom date-range buttons](/images/docs/os/analytics/analytics_topics.webp) ## Overview The Topics tab analyzes what users talk to an agent about. The platform automatically groups conversations into topics, and this dashboard shows how many topics exist, how conversation volume evolves over time, and how messages distribute across topics. All figures are scoped to the agent selected in the header. Topic labels (such as "Study") are derived from conversation content, so the list grows as users raise new subjects. To reach it, open the agent in OS, switch the header toggle to **Admin**, click the analytics icon in the left sidebar, then select **Topics** in the tab bar (**Overview · Users · Topics · Transcripts · Costs · Audit**, with **Data Reports** on the right). ## Target Audience **Administrator** ## What You See #### Topics card The number of distinct conversation topics identified for this agent. #### Conversations card The total number of conversations held with the agent. #### Messages card The total number of messages exchanged. When prior-period data exists, the card shows a percentage change "compared to last month" — green for growth, red for decline (the screenshot shows "-50% compared to last month"). #### Conversations chart A line chart of conversations per day across the selected range. Dates run along the x-axis; the y-axis is the conversation count, so you can see exactly when discussion activity peaked. #### Average Rating chart When users have rated the agent's responses, an Average Rating line chart also appears here, plotting the average rating over time on a 5-point scale (tooltips read "Average Rating: x.x / 5"). It is hidden when no rating data is available. #### Topics Details chart A horizontal bar chart listing each topic with the number of messages attributed to it. Topic names sit on the vertical axis and bar length is the message count, so the agent's dominant subjects are visible at a glance. #### Date-range controls Each chart card has its own filter row: **Today**, **7D**, **30D** (default), **90D**, and **Custom**, which opens a calendar for arbitrary start and end dates. ## How to Use #### Step 1: Open the Topics tab From the agent workspace in **Admin** mode, click the analytics icon in the left sidebar, then click **Topics**. #### Step 2: Read the headline cards Check how many topics have emerged, how many conversations have taken place, and whether message volume is up or down versus last month. #### Step 3: Track conversation volume Use the Conversations chart to see when users engage. Switch between **7D**, **30D**, and **90D** to distinguish a short-term spike from a sustained trend. #### Step 4: Identify dominant topics Scroll to Topics Details and compare bar lengths. Long bars are the subjects your users care about most — useful for deciding what content to add to the agent's datasets or which prompts to refine. #### Step 5: Cross-reference with Transcripts When a topic stands out, open the **Transcripts** tab and filter by that topic name to read the underlying conversations. --- ## Analytics: Transcripts URL: https://ibl.ai/docs/os/analytics/transcripts # Analytics: Transcripts ![Analytics Transcripts tab showing stat cards for average messages per conversation, average cost per conversation, and average rating, Topics and Users filter fields with a Clear All button, a summary bar of conversations, user queries, assistant responses, and average sentiment score, a conversation card with topic chip, sentiment, model, and cost details, and a right pane reading Select a conversation to view its transcript](/images/docs/os/analytics/analytics_transcripts.webp) ## Overview The Transcripts tab is the conversation review surface. It lists every conversation held with an agent as a searchable, filterable card list, and opens the full message-by-message transcript of any conversation in a side panel. Each conversation card carries rich metadata — detected topics, user sentiment, the user's identity, the LLM model used, message count, estimated cost, and age — so you can triage which conversations to read. Headline cards at the top summarize conversation quality across the whole agent. To reach it, open the agent in OS, switch the header toggle to **Admin**, click the analytics icon in the left sidebar, then select **Transcripts** in the tab bar (**Overview · Users · Topics · Transcripts · Costs · Audit**, with **Data Reports** on the right). ## Target Audience **Administrator** ## What You See #### Average number of messages per conversation The mean count of messages in a conversation. When prior-period data exists, a percentage change "compared to last month" appears (the screenshot shows "+50% compared to last month" in green). #### Average cost per conversation The mean estimated LLM cost of a conversation, in dollars. #### Average rating The mean rating users have given the agent's responses; 0 when no ratings have been collected. #### Topics and Users filters Two search fields above the list. **Topics** filters conversations by topic label; **Users** filters by the user who held them. A spinner appears while results refresh, and the **Clear All** button resets both filters. #### Summary bar A gray strip above the list totals the current (filtered) result set: the number of **conversations**, **user queries**, **assistant responses**, and the **average sentiment score**. #### Conversation cards Each card leads with the first user message of the conversation (for example, "Create a detailed exam preparation plan for maths..."). Beneath it are: topic chips (such as "Study"); a sentiment line with a thumbs icon reading **Positive**, **Neutral**, or **Negative User Sentiment**; the user and agent identities; the **model** used (such as "gpt-4o-mini") and **user_id**; and a final row with the message count, the estimated cost in dollars, and when the conversation was created (relative time, such as "Created 28 days ago"). #### Pagination The list is paginated, with a footer such as "Page 1 of 1 · 1 total records" and first/previous/next/last controls when there are multiple pages. #### Transcript panel The right pane initially reads "Select a conversation to view its transcript." Clicking a card loads the **Conversation Transcript** there: a summary of the user's full name, username, the agent, and the model, followed by the complete message thread. ## How to Use #### Step 1: Open the Transcripts tab From the agent workspace in **Admin** mode, click the analytics icon in the left sidebar, then click **Transcripts**. #### Step 2: Gauge conversation quality Read the three headline cards: are conversations getting longer or shorter, what does each one cost on average, and how are users rating the agent? #### Step 3: Filter the list Type a topic name into **Topics** or a user identifier into **Users** to narrow the list. The summary bar recalculates for the filtered set. Click **Clear All** to reset. #### Step 4: Triage from the cards Skim first messages, sentiment labels, and costs to decide which conversations warrant a full read — for example, any card showing Negative User Sentiment. #### Step 5: Read the full transcript Click a conversation card. The right panel shows the complete exchange between the user and the agent, along with the participant and model details, so you can audit answer quality directly. --- ## Analytics: Users URL: https://ibl.ai/docs/os/analytics/users # Analytics: Users ![Analytics Users tab showing stat cards for Users logged in right now, Users logged in past 30 days, and Total registered users, above an Active Users bar chart, an Access Times heatmap with a Less active to More active legend, and a User Details section with a search field and a table of User Email, Username, Messages, and Last Active](/images/docs/os/analytics/analytics_users.webp) ## Overview The Users tab breaks down who is using an agent and when. It combines live and historical login counts, a daily active-user chart, an access-time heatmap, and a searchable per-user activity table. All figures are scoped to the agent selected in the header. The tab answers questions such as "how many people are online right now," "which days drive usage," and "what time of day are users most active." To reach it, open the agent in OS, switch the header toggle to **Admin**, click the analytics icon in the left sidebar, then select **Users** in the tab bar (**Overview · Users · Topics · Transcripts · Costs · Audit**, with **Data Reports** on the right). ## Target Audience **Administrator** ## What You See #### Users logged in right now A live count of users currently logged in and active with this agent. #### Users logged in past 30 days The number of distinct users who logged in during the last 30 days. #### Total registered users The total number of users registered on the platform for this agent's organization. #### Active Users chart A bar chart of distinct active users per day over the selected range. Each bar marks how many users interacted with the agent on that date, making usage spikes easy to spot. #### Access Times heatmap A day-by-hour heatmap of activity. Rows are the days of the week (Sun through Sat) and columns are the 24 hours of the day, labeled at six-hour marks (12, 6, 12, 6). Darker cells mean more activity; a legend beneath runs from **Less active** to **More active**, and hovering a cell shows its exact value. #### User Details table A per-user activity table with a search box ("Search by email or username...") and four columns: **User Email**, **Username**, **Messages** (the user's message count), and **Last Active** (when they last used the agent). Rows alternate shading for readability. #### Date-range controls The Active Users chart, Access Times heatmap, and User Details table each carry their own filter row — **Today**, **7D**, **30D** (default), **90D**, and **Custom** (calendar picker) — so each panel can cover a different window. ## How to Use #### Step 1: Open the Users tab From the agent workspace in **Admin** mode, click the analytics icon in the left sidebar, then click **Users**. #### Step 2: Check the headline counts Read the three cards for a snapshot: who is online right now, how many users came in the past 30 days, and the total registered population. #### Step 3: Find your peak times Scan the Access Times heatmap for the darkest cells — those day/hour combinations are when users engage most. Use this to schedule maintenance, content updates, or support coverage. #### Step 4: Look up individual users In User Details, type an email or username into the search box to filter the table. Sort through Messages and Last Active to identify your most engaged users and those who have gone quiet. #### Step 5: Adjust the time windows Use each panel's **Today / 7D / 30D / 90D / Custom** buttons to re-scope its data — for example, a 90-day heatmap for seasonal patterns next to a 7-day activity chart for the current week. --- ## Notification Alerts URL: https://ibl.ai/docs/os/notifications/alerts # Notification Alerts ![The Alerts tab of the notifications page listing predefined alert templates, each with an Inactive toggle and an Edit button](/images/docs/os/notifications/notification_alerts.webp) ## Overview The Alerts tab manages the platform's predefined, automated notifications. As the page states: "Manage predetermined alerts. Toggle them on/off and edit their content." Each alert is a template tied to a platform event — a learner hitting a course milestone, new content being published, a registration, an invitation — that fires automatically when the event occurs. Every alert appears as a card with its name, a description of when it triggers, an **Active/Inactive** toggle, and an **Edit** button for customizing the message that gets delivered. Alerts are off ("Inactive") until an administrator enables them. Reach the tab from the notifications page: open **Notifications** from the bell icon or the left navigation, then switch the top-left toggle from **Inbox** to **Alerts**. The **+ New Notification** button remains available here for sending one-off messages. ## Target Audience **Administrator** ## Features #### Alert cards Each predefined alert is listed with its name and trigger description. Alerts visible on this screen include: **Course Milestone Reached** ("Notifies learners when their course completion crosses a configurable threshold (e.g. 25%, 50%, 75%, 100%)."), **New Content Available** ("Notifies learners when new content is published in a course they are enrolled in."), **App Registration** ("Email template for app registration"), **Course Invitation** ("Email template for course invitation"), **Course License Assignment**, **Course License Group Assignment**, and **Course Schedule Change**. #### Active / Inactive toggle Each card carries a switch showing the alert's current state. Toggling it on activates the alert so the platform starts delivering it when its trigger event occurs; toggling it off silences it without deleting the template. #### Edit button Opens the "Edit Notification Template" dialog for that alert, described as "Update the notification content and cadence. Required fields are indicated in the form." The dialog contains a **Template Name** field (non-customizable — it identifies the alert), a **Message Title** field ("Required. This appears in the notification header."), and a **Message Body** field ("Required. Provide the full content that will be delivered to learners."). #### New Notification The **+ New Notification** button in the top-right opens the same compose dialog as the [Inbox tab](inbox.md) for sending a one-off notification to selected users or groups. ## How to Use #### Step 1: Open the Alerts tab Go to the notifications page and click **Alerts** in the Inbox/Alerts toggle at the top-left. The list of predefined alert templates loads. #### Step 2: Customize the message Click **Edit** on an alert. Adjust the **Message Title** and **Message Body** (the Template Name is fixed), then save. Both fields are required. #### Step 3: Activate the alert Flip the card's toggle from **Inactive** to active. From then on, the platform sends the alert automatically whenever its trigger event occurs — for example, each time a learner crosses a course-completion threshold. #### Step 4: Silence when needed Toggle an alert back to **Inactive** at any time to stop deliveries; your edited content is preserved for when you re-enable it. --- ## Notification Inbox URL: https://ibl.ai/docs/os/notifications/inbox # Notification Inbox ![The notification inbox with the Inbox tab selected, a notification list on the left, and the rendered notification detail on the right](/images/docs/os/notifications/notification_inbox.webp) ## Overview The notification inbox is the full-page view of every notification you have received on the platform — product announcements, course alerts, and messages sent by your organization's administrators. It complements the bell-icon dropdown in the top bar, which shows recent items and links here via **View all**. The page is a two-pane layout: the left pane lists notifications with an unread indicator, a preview of the message, and a relative timestamp ("Just now"); the right pane renders the selected notification in full, including formatted HTML content such as logos, links, and footers. Reach it from the bell icon in the top bar (**View all**) or the **Notifications** entry in the left navigation. Administrators additionally see controls to compose notifications and to manage automated alerts on the neighboring [Alerts tab](alerts.md). ## Target Audience **User** | **Administrator** (the New Notification button and Alerts tab are administrator-facing) ## Features #### Inbox / Alerts tabs A toggle at the top-left switches between the **Inbox** (received notifications, this page) and **Alerts** (predefined alert templates administrators can toggle and edit). #### Notification list The left pane lists notifications newest-first. Each entry shows a blue dot when unread, the notification title, a two-line preview of the message, and a relative timestamp with a clock icon. Clicking an entry opens it in the detail pane and marks it as read. When there is nothing to show, the pane reads "No notifications found". #### Notification detail pane The right pane renders the selected notification: its title, the exact delivery date and time (for example "July 17, 2026 at 4:00 AM"), and the full message body. Bodies render as formatted HTML, so announcements can include a logo, styled text, and footer links. Before a selection is made the pane prompts "Select a notification to view details". #### New Notification (administrators) The **+ New Notification** button opens the "Send New Notification" dialog to message users in the organization. It includes a **Preview** field (the short text shown in notification lists — "Keep it concise for better engagement"), a **Content** field for the full message, a **Send Time** choice between "Send immediately" and "Schedule for later" with a date picker, and a **Select Recipients** section that can send to individual users or to groups, with a search box for finding them. #### Mark all as read Clears the unread state of every notification in one click. The same action is available from the bell-icon dropdown in the top bar. ## How to Use #### Step 1: Open the inbox Click the bell icon in the top bar and choose **View all**, or select **Notifications** in the left navigation. The **Inbox** tab is selected by default. #### Step 2: Read a notification Click an entry in the left list. The full message renders in the right pane and the unread dot disappears. #### Step 3: Clear the backlog Click **Mark all as read** to reset every unread indicator at once. #### Step 4 (administrators): Send a notification Click **+ New Notification**, write the preview text and message content, choose to send immediately or schedule for later, pick recipients (users or groups), and send. Recipients see it in their inboxes and bell dropdowns. --- ## Organization Settings: Advanced URL: https://ibl.ai/docs/os/organization-settings/advanced # Organization Settings: Advanced ![Advanced settings page with the Default Agent selector and toggles for Help Menu, Accessibility Menu, Persistent Chat Input Label, Community Agents, Report Inappropriate Content, Chat History Export, and the Help Center URL field](/images/docs/os/organization-settings/organization_settings_advanced.webp) ## Overview The Advanced page exposes organization-level feature flags and defaults. The header reads "Advanced — Configure advanced organization settings," and each row pairs a setting name (with an info tooltip explaining it) with its control — a toggle, a dropdown, or a text field. These settings are stored as organization metadata and apply to everyone in the organization. Changes save immediately when you flip a toggle or confirm a value; a toast confirms each update. The list is filtered to the settings relevant to the current application. To reach it, switch the top-bar toggle to **Admin**, open the settings dialog, and select **Advanced** in the left sidebar. ## Target Audience **Administrator** ## Settings #### Default Agent A **Select agent** dropdown that sets the organization-wide default AI agent — the one users land on by default. The dropdown includes a search box to filter the organization's agents, plus a **None** option to clear the default. #### Help Menu Toggle (on in the screenshot). Controls whether the help menu entry is shown to users in the workspace. #### Accessibility Menu Toggle (off in the screenshot). Controls whether the accessibility menu is available to users. #### Persistent Chat Input Label Toggle (off in the screenshot). Controls whether the chat input's label remains persistently visible rather than disappearing once the user starts interacting. #### Community Agents Toggle (on in the screenshot). Controls whether community agents are available in the organization alongside the organization's own agents. #### Report Inappropriate Content Toggle (on in the screenshot). When enabled, users can report an AI response as inappropriate from the chat; the report is sent by email to the organization's support address (set on the Organization page) with the conversation transcript included. #### Chat History Export Toggle (on in the screenshot). Controls whether users can export chat history from the workspace. #### Help Center URL A text field holding the destination of the help links (e.g., `https://docs.ibl.ai`). Point it at your own documentation site; this is the same value surfaced on the Organization page's Help Center setting. ## How to Use #### Step 1: Open Advanced settings In **Admin** mode, open the settings dialog and click **Advanced** in the left sidebar. #### Step 2: Understand a setting Hover the info icon next to any setting name to read its description before changing it. #### Step 3: Set the default agent Open the **Select agent** dropdown next to **Default Agent**, search for the agent by name, and select it. Choose **None** to remove the default. #### Step 4: Toggle features Flip any toggle to enable or disable that feature for the whole organization. Each change saves immediately and shows a confirmation toast. #### Step 5: Point help at your docs Edit **Help Center URL** with your documentation address so the workspace's help entries (enabled via **Help Menu**) send users to the right place. --- ## Organization Settings: Alerts URL: https://ibl.ai/docs/os/organization-settings/alerts # Organization Settings: Alerts ![Management Alerts tab with a search box, New Alert button, and an empty alerts table showing No alerts found](/images/docs/os/organization-settings/organization_settings_management_alerts.webp) ## Overview The Alerts tab configures activity monitoring. As the on-screen description says: "An alert pairs a team of watched users with one or more watchers who get notified when monitored events occur for a watched user. Each watcher subscribes to its own subset of events." Alerts are how supervisors stay informed without polling dashboards: pick the users whose activity matters, pick who should hear about it, and choose which events each watcher cares about. Different watchers on the same alert can subscribe to different event sets. To reach it, switch the top-bar toggle to **Admin**, open the settings dialog, choose **Management**, and select the **Alerts** tab (alongside Users, Groups, Roles, Policies, and Teams). ## Target Audience **Administrator** ## Fields and Controls #### Search alerts A search box that filters the alert list by name as you type. #### New Alert Opens the New Alert dialog with three parts. **Name** (required) labels the alert. **Watched Users** — described in the dialog as "Users whose activity is monitored" — is a type-to-search picker for the accounts being observed. **Watchers** — "Users who receive notifications when watched users perform selected actions" — is a second picker where each added watcher gets their own **events** dropdown. #### Events selector (per watcher, in the dialog) Each watcher row has a combobox (showing "No events" or "N events selected") that opens a checkbox list of monitored event types. Checking events subscribes that watcher to exactly those occurrences for the alert's watched users. #### Name column The alert's name. Each row has edit (pencil) and delete (trash) actions on the right. #### Empty state When nothing is configured yet, the table shows "No alerts found." #### Pagination Alerts page through with pagination controls below the table when the list grows. ## How to Use #### Step 1: Open the Alerts tab In **Admin** mode, open the settings dialog, click **Management**, and select **Alerts**. #### Step 2: Create an alert Click **New Alert** and give it a descriptive name (e.g., "New student activity"). #### Step 3: Choose watched users In **Watched Users**, search for and add each account whose activity should be monitored. #### Step 4: Add watchers and their events In **Watchers**, add each person who should be notified, then open their events dropdown and check the event types they want. Repeat per watcher — each keeps an independent subscription. #### Step 5: Save and maintain Save the alert; it appears in the table. Use the pencil icon to adjust users, watchers, or event subscriptions later, or the trash icon to remove the alert. --- ## Organization Settings: Billing URL: https://ibl.ai/docs/os/organization-settings/billing # Organization Settings: Billing ![Billing page showing the Premium plan, available credits with an Add Credits button, and Auto Recharge settings with threshold, recharge amount, and spending limit](/images/docs/os/organization-settings/organization_settings_billing.webp) ## Overview The Billing page manages what the organization pays for and what it is allowed to spend. The header reads "Billing — Manage your billing and subscription," and the page is divided into three tabs. **Plan & Credits** is the account: the subscription tier, the credit balance, and how it is topped up. **Spend Limits** is the workspace-wide ceiling on LLM spend — one limit covering everything every agent and user consumes. **Agent Limits** is the cross-agent view: every agent that has a spend cap, in one table, with each row opening that agent's own limits. OS meters usage in credits rather than per-seat licenses: the balance is drawn down as the organization consumes the platform, and it can be topped up manually or automatically. Payments run through Stripe using the payment method on file. To reach it, switch the top-bar toggle to **Admin**, open the settings dialog, and select **Billing** in the left sidebar. ## Target Audience **Administrator** | **Finance / Operations** ## Sections and Controls ### Plan & Credits #### Plan Shows the current subscription tier with a **Current** badge — **Premium** in the screenshot; other states are **Free** and **Trial**. Free and Trial plans display an **Upgrade** button that starts a Stripe checkout; Premium plans show their renewal date, and trials show days remaining. #### Credits — Available The credit balance ("Track your available credits and usage"), e.g. "16,984 Credits — Credits remaining," shown alongside its dollar equivalent and the conversion rate in force. When applicable the card also shows **Consumed** (credits used this period) and **Resets on** (the next reset date). #### Add Credits ![Add Credits dialog with an Amount in USD field and a note that the payment method on file will be charged](/images/docs/os/organization-settings/organization_settings_billing_add_credits.webp) Opens a dialog to top up manually: enter an **Amount (USD)** and confirm. The dialog notes "Your payment method on file will be charged for this amount." If no payment method exists yet, the button is replaced by **Manage Billing**, which opens the Stripe portal to add one. #### Auto Recharge "Top up your balance automatically when credits run low." The card shows an **Enabled**/**Disabled** badge and, when enabled, three stats: **Threshold** (balance at which a recharge triggers, `$0.00` in the screenshot), **Recharge Amount** (how much is added, `$10.00`), and **Spending Limit** (a cap on automatic spending — **Unlimited** when no cap is set). #### Manage Usage ![Manage Usage dialog showing the auto-recharge toggle with spending limit, recharge amount, and threshold fields](/images/docs/os/organization-settings/organization_settings_billing_manage_usage.webp) Opens the auto-recharge dialog where you toggle the feature and set the threshold, recharge amount, and spending limit (with an Unlimited option). Enabling with empty values applies sensible defaults ($5 threshold, $16 recharge). Auto recharge is available on paid plans once a payment method is on file. ### Spend Limits ![Spend Limits tab showing the workspace-wide spend cap with its enable toggle, usage strip, spend limit, reset interval, enforcement mode, and alert thresholds](/images/docs/os/organization-settings/organization_settings_billing_spend_limits.webp) #### Workspace-wide limit One ceiling covering everything every agent and every user spends in this workspace. It is the same editor as the per-agent one, at the widest scope: an **enable toggle**, a usage strip once a limit exists, **Spend Limit (USD)**, **Resets Every** (Day / Week / Month / Year), **When the Limit Is Reached** (**Block Requests** or **Alert Only**), **Alert At (% of Limit)**, and **Save** / **Delete Limit**. #### Actual spend, before you set a limit Until a limit exists, this tab shows what the workspace has actually spent — this month and all time — so the number you choose is grounded in real usage rather than guessed. ### Agent Limits ![Agent Limits tab showing the agent search and a table of every agent with a spend cap, listing Limit, Spent, Remaining, and Status columns](/images/docs/os/organization-settings/organization_settings_billing_agent_limits.webp) #### Agent Limits table Every agent in the workspace that has a spend cap, in one table: **Agent**, **Limit** written as amount and period (`$10.00 / Day`), **Spent**, **Remaining**, and **Status** — a toggle that saves immediately, carrying **Exceeded** and **Alert-only** badges where they apply. #### Search Agents Filters the table from two characters up. Searching for an agent that has no cap yet offers a **Set a limit** button for it, which is how a limit gets created from this view rather than from the agent itself. #### Manage ![Manage popup opened from the Agent Limits table, showing the agent's own spend cap on the This Agent sub-tab](/images/docs/os/organization-settings/organization_settings_billing_agent_limits_manage.webp) Opens that agent's full Billing editor in a popup titled with the agent's name — the same **This Agent** and **Per User** sub-tabs documented in [Agent Settings: Billing](/docs/os/agent-settings/billing), so per-user limits can be managed without leaving this page. ![Manage popup on the Per User sub-tab, listing the per-user spend limits configured for that agent](/images/docs/os/organization-settings/organization_settings_billing_agent_limits_per_user.webp) ## How to Use #### Step 1: Open Billing In **Admin** mode, open the settings dialog and click **Billing** in the left sidebar. #### Step 2: Check your plan Confirm the plan card shows the expected tier. On Free or Trial, click **Upgrade** to move to Premium via Stripe checkout. #### Step 3: Add a payment method If prompted with **Manage Billing**, follow it to the Stripe portal and save a payment method. This unlocks Add Credits and Auto Recharge. #### Step 4: Top up credits Click **Add Credits**, enter a USD amount, and confirm. The charge goes to your payment method on file and the balance updates. #### Step 5: Configure auto recharge Click **Manage Usage**, enable auto recharge, and set the threshold, recharge amount, and an optional spending limit. Your balance now tops up automatically whenever it falls below the threshold, never exceeding the limit you set. #### Step 6: Set the workspace-wide spend limit Open **Spend Limits**. Before setting anything, read the actual spend shown there — this month and all time — and pick a ceiling above normal usage. Enter the amount, choose how often it resets, and decide whether reaching it should **Block Requests** or only **Alert**. Save. #### Step 7: Review the agents that have their own limits Open **Agent Limits** for the whole picture: which agents are capped, what they have spent, and what is left. The **Status** toggle turns a cap off without deleting it. #### Step 8: Set or adjust one agent's limits Search for the agent and use **Manage** to open its own Billing editor in place — the agent's cap on **This Agent**, and per-person caps on **Per User**. An agent with no cap yet offers **Set a limit** from the search result. ## Behavior Notes - **Three scopes, tightest wins.** This page holds the workspace-wide limit; agents and individual users have their own on the agent's [Billing](/docs/os/agent-settings/billing) panel. A request has to clear every limit that applies to it. - **Enforcement is server-side.** A workspace limit set to **Block Requests** refuses chat and training requests once exceeded, with a distinct error that can be told apart from a provider rate limit — it is not an advisory number. - **The credit conversion rate is per-environment.** The dollar equivalent shown beside the balance comes from your account's own rate, not a fixed figure. - **Plan state changes what the page offers.** Free and Trial plans see **Upgrade** and no Add Credits or Auto Recharge; a paid plan without a payment method sees **Manage Billing** instead of **Add Credits**, and Auto Recharge stays hidden until a payment method is on file. - **Each tab authorizes separately.** Spend Limits and Agent Limits are permission-gated independently and show their own denied panel — being unable to see them does not hide Plan & Credits. - **An empty first run is normal.** Until a limit is saved there is no record to read, and the tab treats that as its first-run state rather than an error. --- ## Organization Settings: Groups URL: https://ibl.ai/docs/os/organization-settings/groups # Organization Settings: Groups ![Management Groups tab listing RBAC groups with Group Name, Unique ID, and Description columns and a New Group button](/images/docs/os/organization-settings/organization_settings_management_groups.webp) ## Overview The Groups tab manages RBAC groups for the organization. As the on-screen description says: "RBAC groups bundle users so a single policy assignment grants permissions to all of them. The same group can be reused across policies." Groups are the scaling mechanism for access control. Instead of attaching a policy to dozens of individual users, you place users in a group once and reference that group from any number of policies — for example, an `organization_admins` group or a `students` group. To reach it, switch the top-bar toggle to **Admin**, open the settings dialog, choose **Management**, and select the **Groups** tab (alongside Users, Roles, Policies, Teams, and Alerts). ## Target Audience **Administrator** ## Fields and Controls #### Search groups A search box that filters the group list by name as you type. #### New Group Opens the New Group dialog. It contains a **Group Name** field (required), a **Description** field, and a **Group Members** section where you type to search the organization's users and add them one by one. Added members are listed with name and email and can be removed before saving. #### Group Name column The human-readable name of the group (for example, "Organization Admins" or "Students"). #### Unique ID column The group's machine identifier (for example, `organization_admins`, `students`). This is the stable ID that policies and API calls reference, and it stays constant even if the display name changes. #### Description column An optional free-text description of what the group is for. Empty if none was provided. #### Edit (pencil) icon Opens the same dialog as New Group, pre-filled, so you can rename the group, update its description, or add and remove members. #### Delete (trash) icon Deletes the group after confirmation. Policies that referenced the group no longer grant its members those permissions. ## How to Use #### Step 1: Open the Groups tab In **Admin** mode, open the settings dialog, click **Management**, and select **Groups**. #### Step 2: Create a group Click **New Group**, enter a name and optional description, then use the member search to add users. Save the dialog; the group appears in the table with its unique ID. #### Step 3: Use the group in a policy Go to the **Policies** tab and create or edit a policy, adding this group in the policy's Groups section. Every member of the group immediately receives the policy's permissions. #### Step 4: Maintain membership Click the pencil icon on a group's row to add or remove members as people join or leave. Permission changes take effect through the existing policy assignments — no policy edits needed. #### Step 5: Remove a group Click the trash icon to delete a group that is no longer needed. Review which policies reference it first, since its members lose those grants. --- ## Organization Settings: Data Source Integrations URL: https://ibl.ai/docs/os/organization-settings/integrations-data-sources # Organization Settings: Data Source Integrations ![Integrations Data Sources tab showing a drive credential with a masked key and an Add Data Source button](/images/docs/os/organization-settings/organization_settings_integrations_data_sources.webp) ## Overview The Data Sources tab stores credentials for the third-party content and data services your agents draw on. As the on-screen banner says: "These are data source credentials from third-party services that you've configured for use with your application." These are outbound integration credentials — for example, a Google Drive connection (shown as `drive` in the screenshot) that lets agents ingest documents from your organization's storage. Each credential is stored per organization and displayed with a masked key (e.g., `23r****2r`) so the secret is never redisplayed. To reach it, switch the top-bar toggle to **Admin**, open the settings dialog, choose **Integrations** in the left sidebar, and select the **Data Sources** tab (alongside LLMs and APIs). ## Target Audience **Administrator** ## Fields and Controls #### Add Data Source Opens the Add Data Source dialog. Choose a **Provider** from the dropdown of supported services; the form then renders that provider's credential fields dynamically from its schema, with sensitive fields handled as secrets. Submit to store the credential for the organization. #### Name column The provider identifier for each stored credential (e.g., `drive`), shown with an icon. #### Key column The stored credential in masked form — only the outer characters are visible. To change a credential, delete it and add a new one; the full value is never redisplayed. #### Delete (trash) icon Removes the data source credential from the organization. Agents and ingestion jobs that depended on it can no longer reach that service until a new credential is added. ## How to Use #### Step 1: Open the Data Sources tab In **Admin** mode, open the settings dialog, click **Integrations**, and select the **Data Sources** tab. #### Step 2: Add a credential Click **Add Data Source**, pick the provider, and fill in the fields the form presents for that service. Click **Submit**; a success toast confirms it was saved. #### Step 3: Verify and use The credential appears in the table with a masked key. Agents in this organization can now pull content from that data source — for example, when attaching documents from connected storage to an agent's knowledge. #### Step 4: Rotate or remove Delete the entry with the trash icon and re-add it to rotate the underlying secret. Remove credentials for services you no longer use to keep the organization's integration surface minimal. --- ## Organization Settings: LLM Integrations URL: https://ibl.ai/docs/os/organization-settings/integrations-llms # Organization Settings: LLM Integrations ![Integrations LLMs tab showing an OpenAI credential with a masked key and an Add LLM button](/images/docs/os/organization-settings/organization_settings_integrations_llms.webp) ## Overview The LLMs tab stores your organization's model-provider credentials. As the on-screen banner says: "These are LLM keys from third-party services that you've configured for use with your application." OS is model-agnostic: agents can run on any provider you hold keys for. Keys added here are stored per organization and served back masked (e.g., `ewf************`), so the full secret is never redisplayed in the UI. In the screenshot, an OpenAI key is configured. To reach it, switch the top-bar toggle to **Admin**, open the settings dialog, choose **Integrations** in the left sidebar, and select the **LLMs** tab (alongside Data Sources and APIs). ## Target Audience **Administrator** ## Fields and Controls #### Add LLM Opens the Add LLM dialog. First choose a **Provider** from a dropdown of supported services (each listed with its logo and display name); the form then renders that provider's required credential fields dynamically from its schema — typically an API key, plus provider-specific values. Submit to save the credential for the organization. #### Azure OpenAI configuration Azure OpenAI is a special case in the Add LLM dialog: instead of a single key, you select one or more models and enter per-model credentials (key and deployment details) in collapsible cards, since Azure scopes access per deployment. #### Name column The provider for each stored credential, shown with its logo (e.g., OpenAI). Azure OpenAI entries can expand to list per-model credentials. #### Key column The stored key in masked form — only the first characters are visible. The platform never redisplays the full secret; to rotate a key, delete the credential and add a new one. #### Delete (trash) icon Removes the credential from the organization after confirmation. Agents relying on that provider will no longer be able to call it until a new key is added. ## How to Use #### Step 1: Open the LLMs tab In **Admin** mode, open the settings dialog, click **Integrations**, and make sure the **LLMs** tab is selected. #### Step 2: Add a provider key Click **Add LLM**, pick the provider from the dropdown, and fill in the credential fields the form presents. Click **Submit**; a success toast confirms the key was stored. #### Step 3: Verify the entry The new credential appears in the table with its provider name and a masked key. Agents in this organization can now use models from that provider. #### Step 4: Rotate or remove keys To rotate a credential, delete the old entry with the trash icon and add the replacement via **Add LLM**. Deleting without replacing disables that provider for the organization's agents. --- ## Organization Settings: Memory URL: https://ibl.ai/docs/os/organization-settings/memory # Organization Settings: Memory ![Memory settings on the Global tab, showing the user search and a table of organization users with Name, Username, and Email columns and a per-row view action](/images/docs/os/organization-settings/organization_settings_memory.webp) ## Overview The Memory settings surface is where an administrator manages memories that belong to other people and to agents — "Manage user global memories and agent memories" for the whole organization from one place. It has two tabs that answer two different questions. **Global** works user by user: pick a person and manage the memories that follow them across every agent, along with the two switches that control whether the platform is allowed to learn from their conversations at all. **Agent** works agent by agent: pick an agent and manage the memories it has accumulated about the people who talk to it. This is the administrative counterpart of two surfaces that already exist for individuals. A user manages their own memories under [Profile: Memory](/docs/os/profile/memory), and an agent's own memories are managed in [Agent Settings: Memory](/docs/os/agent-settings/memory). This page is the same data, reachable by someone with the authority to act on another person's behalf — which is what you need when a memory is wrong, sensitive, or belongs to someone who has left. To reach this screen, open the organization's **Account** settings and select the **Memory** tab. ## Target Audience **Administrator** | **Data Protection Officer** | **Support Team** ## Panel Reference #### Global / Agent tabs The two ways into the same memory store. **Global** lists the organization's users; **Agent** lists its agents. Each tab loads its own data and is permission-gated on its own endpoints. #### Search Users A debounced search across the organization's users on the Global tab. Very short terms — under three characters — are treated as no search at all rather than matching noise. The table pages ten users at a time. #### Users table **Name**, **Username**, and **Email** for each user, with a view action on every row. Accounts with no username are left out, because the memory endpoints have no way to address them. #### Global Memories popup ![Global Memories popup for one user, showing the memory-capture and personalization toggles above the user's list of saved memories](/images/docs/os/organization-settings/organization_settings_memory_user_memories.webp) Opening a row shows everything the platform remembers about that person across all agents: - **"Allow AI to learn from our conversations"** — their memory-capture switch. Off means nothing new is recorded. - **"Use my saved information in responses"** — their personalization switch. Off means existing memories stay stored but are not used to shape replies. - **Add Memory** and the memory list, twenty-five to a page. Each row carries the memory text, its date, an edit and delete menu, and — where the memory was captured automatically from chat rather than typed in by hand — a robot icon and an `auto` badge. #### Agent filter An autocomplete over the organization's agents on the Agent tab, from two characters up. Picking an agent narrows the table to it. #### Agents table ![Memory settings on the Agent tab, showing the agent filter and a table of agents with Agent and Description columns and a per-row view action](/images/docs/os/organization-settings/organization_settings_memory_agents.webp) **Agent** and **Description** for each agent, ten to a page, with a view action on every row. #### Agent memories popup ![Agent Memories popup showing the user filter, date range, category tabs, and memory cards for a single agent](/images/docs/os/organization-settings/organization_settings_memory_agent_memories.webp) Opening an agent row loads the same memory manager the agent's own Memory tab renders, for that agent: a **Search for User** filter, a **Pick a Date Range** control, category tabs (All, Knowledge Gaps, Learning Goals, Personal Context, Preferences, and any you have added), a **Categories** manager for creating, renaming, and deleting categories, **Add Memory**, and one card per memory showing how long ago it was recorded, the email of the user it concerns, and an actions menu. ## How to Use #### Step 1: Open Memory settings Go to the organization's **Account** settings and select the **Memory** tab. It opens on **Global**. #### Step 2: Correct or remove one person's memories Search for the person, open their row, and read what has been stored. Edit a memory that is wrong, or delete one that should never have been kept — an `auto` badge tells you the platform captured it from a conversation rather than someone entering it deliberately. #### Step 3: Stop future capture where it is not wanted Switch **"Allow AI to learn from our conversations"** off for that user. Existing memories stay until you remove them; nothing new is added. Turning off **"Use my saved information in responses"** instead leaves the record intact but stops it influencing replies — the right choice when you want to preserve the history but suspend its effect. #### Step 4: Review what an agent has learned Switch to the **Agent** tab, filter to the agent, and open it. Use the category tabs and date range to find the memories you care about, or the user filter to see everything one agent has retained about one person. #### Step 5: Keep the category scheme tidy Inside an agent's memories, use the **Categories** manager to add the categories your organization actually reasons in, and rename or delete the ones nobody uses. Categories are what make a large memory store reviewable later. ## Behavior Notes - **Memory search has to be enabled first.** With memory search switched off for the organization, this tab shows a "feature disabled" notice — the same gate the profile Memory tab applies. There is nothing to manage until it is on. - **Each section is permission-gated separately.** The users list, the agents list, and the memory endpoints authorize independently, so a role can be allowed one and denied another; the denied section shows its own notice instead of failing the page. - **`auto` marks a captured memory, not a protected one.** Memories the platform captured from conversations are flagged to distinguish them from ones a person entered deliberately. Both are equally editable and deletable here. - **The two toggles do different things.** Capture governs what gets written; personalization governs what gets read back. Turning off capture alone leaves earlier memories in play. - **The same memory has three doors.** What you change here is what the user sees on their own Profile: Memory page, and what the agent uses in conversation — there is one store, reachable from three surfaces with different authority. ## Building Memory Administration Into Your Own App The tenant Memory surface ships in the ibl.ai SDK as a tab of the Account page, so the same administrative view can live in a product you build yourself. Install the [iblai/vibe](https://github.com/iblai/vibe) skills and render the Account page targeting its memory tab; the underlying data-layer hooks are also exported, so a custom screen can be built directly on the same endpoints. One detail matters when doing so: reads are made with the administrator as the caller and the managed user passed as a parameter, while writes address the managed user's own path and let the backend resolve the administrator's permissions. The reusable skill for this workflow is [`iblai-vibe-memory`](https://github.com/iblai/vibe/tree/main/skills/iblai-vibe-memory), and the SDK overview is at [Vibe SDK](/developer/platform/vibe-sdk). --- ## Organization Settings: Monetization URL: https://ibl.ai/docs/os/organization-settings/monetization # Organization Settings: Monetization ![Monetization page showing the Stripe Configuration card in the Not Configured state with a Configure Stripe button and a paywall area reading Connect Stripe first to configure paywalls](/images/docs/os/organization-settings/organization_settings_monetization.webp) ## Overview The Monetization page lets an organization sell access to its content and agents. The header reads "Monetization — Configure paywalls, pricing, and revenue," and everything on it is powered by a connected Stripe account that receives the payments. Setup is two-stage: first connect Stripe, then configure paywalls. Until Stripe onboarding is complete, the paywall area stays disabled with the message "Connect Stripe first to configure paywalls." — which is the state shown in the screenshot. To reach it, switch the top-bar toggle to **Admin**, open the settings dialog, and select **Monetization** in the left sidebar. (The entry appears when monetization is enabled for the organization and you have permission to manage it.) ## Target Audience **Administrator** ## Sections and Controls #### Stripe Configuration status badge Shows the connection state: **Not Configured** (no Stripe account yet — "Connect a Stripe account to enable monetization features."), **Incomplete** (account created but onboarding unfinished), or **Configured** (connected and ready, with charges and payouts enabled). #### Configure Stripe ![Monetization tab before Stripe onboarding, showing the Not Configured status and the Configure Stripe action above a disabled paywall area](/images/docs/os/organization-settings/organization_settings_monetization_onboarding.webp) Starts Stripe Connect onboarding: you are redirected to Stripe to create or link an account (as a company), then returned to this page. If onboarding was interrupted, the button reads **Complete Setup**; once configured it becomes **Stripe Dashboard**, which opens your Stripe account in a new tab. #### Paywall configuration area ![Paywall configuration area with the item search, the All / Active / Disabled filter, and the list of configured items](/images/docs/os/organization-settings/organization_settings_monetization_paywall.webp) Disabled (dashed placeholder) until Stripe is ready. Once connected, it lists your configured items for sale and lets you add more: search for an existing item to paywall or add a custom item, filter configured items by All/Active/Disabled, set pricing, and choose a grandfathering policy for pre-paywall users (**Free Forever** or **Require Subscription**). ![Pricing configuration for one item, showing the price fields and the grandfathering policy choice](/images/docs/os/organization-settings/organization_settings_monetization_pricing.webp) ![List of configured paywall items with their pricing and status](/images/docs/os/organization-settings/organization_settings_monetization_pricing_list.webp) ## How to Use #### Step 1: Open Monetization In **Admin** mode, open the settings dialog and click **Monetization** in the left sidebar. #### Step 2: Connect Stripe Click **Configure Stripe** and complete the Stripe Connect onboarding flow — business details, bank account, and identity verification. You are returned here afterward; the badge should now read **Configured**. #### Step 3: Finish interrupted onboarding If the badge shows **Incomplete**, click **Complete Setup** to resume where Stripe left off. Payments cannot be accepted until onboarding finishes. #### Step 4: Configure a paywall With Stripe ready, use the paywall area to pick the item to sell (or add a custom item), set its pricing, and save the configuration. Decide how existing users are treated via the grandfathering setting. #### Step 5: Track revenue Click **Stripe Dashboard** anytime to open your Stripe account and review payments, payouts, and customers. --- ## Organization Settings: Organization URL: https://ibl.ai/docs/os/organization-settings/organization # Organization Settings: Organization ![Organization settings page showing the organization ID, name, support email, Help Center toggle, and light and dark logo uploaders](/images/docs/os/organization-settings/organization_settings_organization.webp) ## Overview The Organization page holds your organization's identity and branding: its unique ID, display name, support contact, Help Center link, and the logos shown throughout the workspace. Changes made here apply to the entire organization and to every user who signs in to it. Because OS is multi-organization, each organization carries its own configuration and branding. This page is where administrators set the values that make an organization look and feel like their own product — the name in the interface, the logo in the sidebar, and where users go for help. To reach it, sign in as an administrator (switch the User/Admin toggle in the top bar to **Admin**), open the settings dialog, and select **Organization** in the left navigation. The header reads "Organization — Manage your organization settings." ## Target Audience **Administrator** ## Fields and Controls #### ID The organization's unique identifier — a read-only alphanumeric string (for example, `5c777c9812af4ad9a3235a03e20ca281`). Use it when referencing the organization in API calls or support requests. It cannot be edited. #### Name The organization's display name, shown with an edit (pencil) icon. Click the icon to type a new name and save it; the platform updates the organization's platform info record. A newly created organization may show "Default" until you rename it. #### Support The support email address for the organization (default: `support@iblai.zendesk.com`). Click the pencil icon to replace it with your own helpdesk address. This address receives user-submitted reports, such as inappropriate-content reports sent from chat. #### Help Center A toggle that controls whether the Help entry is shown to users, paired with an editable Help Center URL (default: `docs.ibl.ai`). When enabled, users can open your documentation site from the workspace. Click the pencil icon to point it at your own help center; the protocol (`https://`) is added automatically. #### Light Logo The logo used on light backgrounds. Click the upload area to choose an image file; once uploaded, a preview is shown with an **×** button to remove it. The light logo replaces the default branding across the workspace immediately after upload. #### Dark Logo The logo used on dark backgrounds and in dark mode. The dark preview tile shows **+ Upload** until a file is chosen. Uploading works the same way as the light logo and is stored separately, so you can provide a variant with appropriate contrast for each theme. ## How to Use #### Step 1: Open Organization settings Switch to **Admin** mode using the toggle in the top navigation bar, open the settings dialog, and click **Organization** in the left sidebar. #### Step 2: Rename the organization Click the pencil icon next to **Name**, enter the new organization name, and confirm. The name updates across the organization. #### Step 3: Set your support email Click the pencil icon next to **Support**, enter your helpdesk address, and save. User reports and support links now route to this address. #### Step 4: Configure the Help Center Leave the **Help Center** toggle on to show help links to users, and edit the URL to point at your own documentation site. Turn the toggle off to hide help entries entirely. #### Step 5: Upload logos Click the **Light Logo** area and select an image for light backgrounds, then use the **Dark Logo** tile's **+ Upload** to add a dark-mode variant. Use the **×** on a preview to remove a logo and revert to the default. --- ## Organization Settings: Policies URL: https://ibl.ai/docs/os/organization-settings/policies # Organization Settings: Policies ![Management Policies tab listing RBAC policies with Policy Name and Role columns and a New Policy button](/images/docs/os/organization-settings/organization_settings_management_policies.webp) ## Overview The Policies tab is where RBAC comes together. As the on-screen description says: "An RBAC policy grants a role's permissions to a set of users or groups on a set of resources. Resources are hierarchical: granting on /platforms/{pk}/mentors/ covers every agent, while /platforms/{pk}/mentors/{pk}/ scopes to one." A policy binds three things: a **role** (the permission bundle), **who** receives it (users and/or groups), and **which resources** it applies to (hierarchical paths with wildcard support). The screenshot shows examples like "Organization Admin", "Student Mentor Creator", "Student Mentor List", "LLM User", and "LLM Model Access", each paired with its role. To reach it, switch the top-bar toggle to **Admin**, open the settings dialog, choose **Management**, and select the **Policies** tab (alongside Users, Groups, Roles, Teams, and Alerts). ## Target Audience **Administrator** ## Fields and Controls #### Search policies A search box that filters the policy list by name as you type. #### New Policy Opens the New Policy dialog. It includes a policy name, a **Role** picker (type to search existing roles; each result shows the role's name and description), a **Resources** field, a **Users** section, and a **Groups** section. #### Resources field (in the dialog) Takes hierarchical resource paths — press Enter or click + to add each — such as `/platforms/{pk}/projects` or `/platforms/{pk}/mentors/*`. Wildcards and path parameters are supported. A grant on a parent path covers everything beneath it; a grant on a specific ID scopes to that one resource. #### Users and Groups sections (in the dialog) Type-to-search pickers that attach the policy to individual users, to RBAC groups (from the Groups tab), or both. Selected entries appear with name and email and can be removed before saving. #### Policy Name column The policy's display name. #### Role column The role whose permissions this policy grants (shows "N/A" if the role was removed). #### Edit (pencil) icon Opens the policy dialog pre-filled to adjust the role, resources, users, or groups. #### Delete (trash) icon Deletes the policy after confirmation. Built-in policies are protected: the delete button is disabled with the tooltip "Cannot delete internal policies." ## How to Use #### Step 1: Open the Policies tab In **Admin** mode, open the settings dialog, click **Management**, and select **Policies**. #### Step 2: Create a policy Click **New Policy** and name it after the grant it represents (e.g., "Student Mentor Creator"). #### Step 3: Pick the role Search for and select the role whose actions this policy should grant. Define the role first on the **Roles** tab if it doesn't exist yet. #### Step 4: Scope the resources Add resource paths. Use a broad path such as `/platforms/{pk}/mentors/` to cover every agent in the organization, or a specific path ending in an ID to scope the grant to a single resource. #### Step 5: Assign recipients Add individual users and/or groups. Using groups is recommended for anything beyond a handful of people — membership changes then flow through automatically. #### Step 6: Save and verify Save the policy and confirm it appears in the table with the right role. For non-admin users, the policy is now available to attach in the **Users** tab's Policies dropdown as well. --- ## Organization Settings: Roles URL: https://ibl.ai/docs/os/organization-settings/roles # Organization Settings: Roles ![Management Roles tab listing RBAC roles such as Can Sell Mentor, Mentor Chat, Team Creator, Enrollment Manager, List Teams, and Read Team](/images/docs/os/organization-settings/organization_settings_management_roles.webp) ## Overview The Roles tab manages the permission bundles used by RBAC. As the on-screen description says: "An RBAC role is a named bundle of permissions (actions applied to resources in policies)." A role defines *what* can be done — read settings, create teams, chat with an agent — while a policy (on the Policies tab) defines *who* can do it and *on which resources*. The screenshot shows example roles such as "Can Sell Mentor", "Mentor Chat", "Team Creator", "Enrollment Manager", "List Teams", and "Read Team". To reach it, switch the top-bar toggle to **Admin**, open the settings dialog, choose **Management**, and select the **Roles** tab (alongside Users, Groups, Policies, Teams, and Alerts). ## Target Audience **Administrator** ## Fields and Controls #### Search roles A search box that filters the role list by name as you type. #### New Role Opens the New Role dialog with three parts. **Role Name** (required) names the bundle. **Actions** takes permission strings — press Enter or click + to add each one — in the form `Namespace/Resource/verb`, e.g. `Ibl.Mentor/Settings/read`; wildcards are supported (e.g. `Ibl.Mentor/*/write`). **Data Actions** grants field-level access, e.g. `Ibl.Mentor/Settings/email/read` — the same syntax with a field segment. #### Name column The role's name. Roles are listed one per row with actions on the right. #### Edit (pencil) icon Opens the role dialog pre-filled so you can rename it or add and remove actions and data actions. #### Delete (trash) icon Deletes the role after confirmation. Built-in roles are protected: the delete button is disabled with the tooltip "Cannot delete internal roles." #### Pagination Roles page ten at a time with pagination controls below the table. ## How to Use #### Step 1: Open the Roles tab In **Admin** mode, open the settings dialog, click **Management**, and select **Roles**. #### Step 2: Create a role Click **New Role** and give it a descriptive name for the capability it represents (e.g., "Team Creator"). #### Step 3: Add actions In the **Actions** field, type each permission string (such as `Ibl.Mentor/Settings/read`) and press Enter or click **+**. Use wildcards like `Ibl.Mentor/*/read` to cover an entire resource family. Added actions show as removable chips. #### Step 4: Add data actions (optional) For field-level control, add entries in **Data Actions** such as `Ibl.Mentor/Settings/email/read` to permit access to a specific field only. #### Step 5: Attach the role to a policy Save the role, then open the **Policies** tab and create a policy that pairs this role with users or groups and a set of resources. The role has no effect until a policy references it. --- ## Organization Settings: Teams URL: https://ibl.ai/docs/os/organization-settings/teams # Organization Settings: Teams ![Management Teams tab with a Team Name and Description table, search box, and Invite and New Team buttons](/images/docs/os/organization-settings/organization_settings_management_teams.webp) ## Overview The Teams tab manages shareable sets of users. As the on-screen description says: "A team is a curated set of users that you can share with others — e.g., grant another user permission to view the team's analytics or send notifications to them." Where Groups exist purely for RBAC policy assignment, Teams are audience-facing: a team is something you monitor and act on. Typical uses are giving a manager or instructor visibility into their team's analytics, or targeting a notification to a defined cohort. To reach it, switch the top-bar toggle to **Admin**, open the settings dialog, choose **Management**, and select the **Teams** tab (alongside Users, Groups, Roles, Policies, and Alerts). ## Target Audience **Administrator** ## Fields and Controls #### Search teams A search box that filters the team list by name as you type. #### Invite Opens the user invite dialog so you can bring new people into the organization directly from this tab — by single email or CSV bulk upload. Useful when assembling a team whose members don't have accounts yet. #### New Team Opens the New Team dialog with a **Team Name** field (required), a **Description** field, and a **Team Members** section where you type to search existing users and add them. Members are listed with name and email and can be removed before saving. #### Team Name column The team's display name. #### Description column An optional description of the team's purpose. #### Empty state When no teams exist yet, the table shows "No teams found." #### Row actions Each team row provides edit and delete actions like the Groups tab, plus a share action (permission-gated) that lets you share the team with another user — granting them the ability to view the team's analytics or send notifications to its members. ## How to Use #### Step 1: Open the Teams tab In **Admin** mode, open the settings dialog, click **Management**, and select **Teams**. #### Step 2: Create a team Click **New Team**, name it, add a description, and search-and-add its members. Save the dialog and the team appears in the table. #### Step 3: Invite missing members If someone isn't in the organization yet, click **Invite** to send them an email invitation (individually or via CSV), then add them to the team once their account exists. #### Step 4: Share the team Use the share action on the team's row to grant another user access to the team — for example, so a supervisor can view the team's analytics or send notifications to it. #### Step 5: Keep it current Edit the team to adjust membership over time, or delete it when the cohort is no longer needed. --- ## Organization Settings: Users URL: https://ibl.ai/docs/os/organization-settings/users # Organization Settings: Users ![Management Users tab showing a searchable user table with Name, Email, Role, Policies, and Status columns and an Invite button](/images/docs/os/organization-settings/organization_settings_management_users.webp) ## Overview The Users tab is the organization-wide user directory. As the on-screen description says: "Manage platform-wide users and their predefined roles. Admins have the highest level of permissions; Users can optionally be granted limited policies." Every person in the organization appears here with their role, any RBAC policies attached to them, and an active/inactive status. From this one table an administrator can promote or demote users, grant fine-grained policies, deactivate accounts, and invite new members. To reach it, switch the top-bar toggle to **Admin**, open the settings dialog, choose **Management** in the left sidebar, and select the **Users** tab (alongside Groups, Roles, Policies, Teams, and Alerts). ## Target Audience **Administrator** ## Fields and Controls #### Search users A search box that filters the table by name or email. The search is debounced and fires once you type more than three characters; results reset to the first page. #### Invite Opens the invite dialog to add new users by email. You can send a single invitation, or bulk-invite by uploading a CSV file (with an `email` column, plus optional `first_name`, `last_name`, `platform_key`, `company_name`, and `user_group` columns) and reviewing the parsed rows before sending. Invited users receive an email that brings them into the organization. #### Name column The user's display name. It may be blank for accounts that have not completed their profile. #### Email column The user's email address (or identifier for programmatically created accounts). #### Role column A dropdown per user with two predefined roles: **Admin** and **User**. Admins hold the highest level of permissions across the organization. Changing a user's role also clears their attached policies, so permissions can be reassigned cleanly for the new role. #### Policies column A dropdown per user showing attached RBAC policies. Admins display as "All (N) selected" because they implicitly hold every policy; their selection cannot be edited. Non-admin users show "No policies" or a count, and opening the dropdown lets you check or uncheck individual policies (defined on the Policies tab) to grant limited permissions. #### Status column A toggle that activates or deactivates the user in this organization. Deactivated users lose access without being deleted, and the toggle can be flipped back at any time. #### Pagination The table pages through users ten at a time, with pagination controls at the bottom when more than one page exists. ## How to Use #### Step 1: Open the Users tab In **Admin** mode, open the settings dialog, click **Management**, and select the **Users** tab. #### Step 2: Find a user Type a name or email into **Search users**. The list filters as you type (after the fourth character). #### Step 3: Change a role Open the **Role** dropdown on the user's row and pick **Admin** or **User**. Note that switching roles clears the user's existing policies. #### Step 4: Grant policies For a non-admin user, open the **Policies** dropdown and check the policies to attach. Changes save immediately and a confirmation toast appears. #### Step 5: Activate or deactivate Flip the **Status** toggle to enable or disable the account within the organization. #### Step 6: Invite new users Click **Invite**, enter an email address (or upload a CSV for bulk invitations), and send. New users appear in the table once invited. --- ## Organization Settings: Virtual Machine URL: https://ibl.ai/docs/os/organization-settings/virtual-machine # Organization Settings: Virtual Machine ![The Virtual Machine tab on the Network Policies sub-tab: an explanatory banner, a New Policy button, and a table with Name, Allowed Hosts, Description, Updated and Actions columns](/images/updates/vm-network-policies-secrets-policies.webp) ## Overview The Virtual Machine settings surface holds the two organization-wide records that decide what an agent's sandbox may reach and which credentials it may use — "Manage the network policies and secrets available to agents' virtual machines." An agent running on the **Virtual Machine Shell** sandbox kind starts with no network at all. Opening that up is deliberate, and the things it is opened up to are defined here rather than per agent: a **network policy** is a named list of exact `host:port` destinations, and a **VM secret** is a key the agent can use but never read. Both are written once and reused across every agent in the organization, and neither is ever shared across organizations. This page is the organization half of a surface whose other half lives on each agent. An agent selects from these records in its [Sandbox](/docs/os/agent-settings/sandbox) settings, under Network Access; nothing here binds itself to an agent on its own. To reach this screen, open the organization's **Account** settings and select the **Virtual Machine** tab. The entry is listed for administrators only. ## Target Audience **Administrator** | **Security Team** | **Platform Engineer** ## Panel Reference #### Network Policies / Secrets sub-tabs The two record types, each loading its own list and gated on its own permission. Creating, changing and deleting policies and secrets are **separate permissions**, one for each, held by organization admins by default — so a sub-tab whose list call is refused is hidden rather than shown empty, and when both are refused the tab shows a single permission notice instead of either table. #### Network Policies table **Name**, **Allowed Hosts**, **Description**, **Updated** and row actions. **New Policy** opens the form; every row can be edited or deleted. - Entries are **exact `host:port` pairs — no wildcards — and at most 100 per policy**. Loopback, link-local and cloud metadata addresses are refused outright. - Hosts are entered as chips: type one entry and press Enter (a comma or a space works too, and a pasted list is split). A rejected entry **stays in the box with the reason shown underneath** instead of becoming a chip, Backspace on an empty box removes the last chip, and each chip carries its own remove button. - Removing hosts from a policy that agents already use is warned about in the form before you save, because the agents bound to it lose that destination. - Deleting a policy asks for confirmation in its own dialog. #### Secrets table ![The same Virtual Machine tab on the Secrets sub-tab, with a New Secret button and a table of Name, Variable, Allowed Hosts, Source, Updated and Actions](/images/updates/vm-network-policies-secrets-secrets.webp) **Name**, **Variable**, **Allowed Hosts**, **Source**, **Updated** and row actions. A secret's value is **never returned by any endpoint**. The form therefore never prefills it: on edit the value box stays blank ("Leave blank to keep the current value") and the **Environment Variable** name is read-only, because the agents already bound to it read that name. #### Secret source: a stored value or a saved credential A secret either carries its own **Stored Value**, or **points at one field of a credential the organization already stores** for an integration. Pointing at the stored credential means the key is never typed twice, and rotating it once updates every agent that uses it. Where the organization has no integration credentials yet, the form says so rather than offering an empty picker. #### Allowed Hosts on a secret The hosts whose requests the real value may be substituted into, entered as the same chips as a policy's. Inside the virtual machine the environment variable holds a **placeholder**; the real value is substituted only on encrypted requests to those hosts. The agent can call your API with the key and still cannot print, log or leak it. ## How Do I Give One Agent Access to an Internal API? #### Step 1: Write the policy On **Network Policies**, click **New Policy**, name it for the system it describes, and add each `host:port` the agent needs as a chip. Save. #### Step 2: Create the secret On **Secrets**, click **New Secret**. Name it, set the **Environment Variable** the agent's code will read, add the same hosts under **Allowed Hosts**, and either paste a **Stored Value** or point the secret at a field of an existing integration credential. #### Step 3: Bind them to the agent Leave this dialog and open the agent's [Sandbox](/docs/os/agent-settings/sandbox) settings. With **Virtual Machine Shell** active, set the **Egress Profile** to **Custom Allowlist**, select the policy, tick the secret, and save. Every host a bound secret needs must be covered by the selected policy; where one is not, the agent's panel offers to add the missing hosts to the policy as part of the save. ## Notes - Both record types are organization-wide. An agent's Network Access section only **selects** from them, so narrowing a policy here narrows it everywhere it is bound. - A secret is useful only under the **Public Internet** or **Custom Allowlist** egress profiles; the other two give the virtual machine nothing to reach. - The capability behind these screens, including per-second runtime billing, is described for a general audience in [Agent Sandboxes: A Real Linux VM, Locked to Hosts You Allow](/updates/agent-sandbox-virtual-machines-network-policies) and [Agent Network Policies and Secrets, Now in Settings](/updates/virtual-machine-settings-policies-and-secrets). --- ## Profile: Basic Information URL: https://ibl.ai/docs/os/profile/basic # Profile: Basic Information ![The Basic tab of the User Profile dialog, showing Full Name, Email, Title, About, and Language fields](/images/docs/os/profile/user_profile_basic.webp) ## Overview The Basic tab is the first section of the User Profile dialog. It holds your core account information — name, email, professional title, a short bio, and your preferred language — and is where those details are edited and saved. The left side of the dialog shows your profile photo, your account email, and a role badge (for example "Admin") when your account has elevated permissions. Below that sits the navigation rail with every profile section: Basic, Social, Education, Experience, Purchases, Memory, Privacy, and Security. To reach this screen, click your avatar in the top-right corner of the OS header and open your profile. The dialog opens on the Basic tab by default, with the header text "Manage your basic account information and preferences." ## Target Audience **User** — every account holder on the platform. No administrator permissions are required to edit your own basic information. ## Fields and Controls #### Profile photo (avatar) Your current profile picture is displayed at the top of the left panel. The avatar doubles as an upload control (accessible name: "Upload profile picture") — click it to choose a new image; image file types are accepted. #### Full Name A text field pre-populated with your display name. This is the name shown across the platform; edit it and save to change it. #### Email A text field showing the email address on the account. It is pre-populated from your account record. #### Title A free-text field for your professional title (for example, "Software Engineer"). Changes persist after saving and remain when the dialog is reopened. #### About A multi-line text area with the placeholder "Tell us about yourself." Use it for a short bio that becomes part of your profile. #### Language A dropdown labeled "Select a language" that sets your preferred language. Available options are English, Spanish, and French. #### Save Changes / Cancel "Save Changes" submits the form and persists all edits on this tab; the dialog stays open after a successful save. "Cancel" discards unsaved edits. While a save is in progress the fields are temporarily disabled. ## How to Use #### Step 1: Open your profile Click your avatar in the top-right corner of the header and open your profile. The User Profile dialog appears on the Basic tab. #### Step 2: Edit your details Update the Full Name, Title, or About fields, and pick a preferred language from the Language dropdown. #### Step 3: Save Click "Save Changes." The dialog remains open and the new values persist. Click "Cancel" instead to discard the edits, or the X in the top-right corner to close the dialog. --- ## Profile: Education Credentials URL: https://ibl.ai/docs/os/profile/education-credentials # Profile: Education Credentials ![The Credentials sub-tab of the Education section, showing the search field and an empty state reading "Nothing to show here."](/images/docs/os/profile/user_profile_education_credentials.webp) ## Overview The Credentials sub-tab lives inside the Education section of the User Profile dialog, alongside the Education and Skills sub-tabs. It lists the credentials associated with your account — such as certificates and badges issued through the platform — and provides a search field for filtering them. When no credentials have been earned yet, the panel shows a dashed placeholder card with a ribbon icon and the message "Nothing to show here." Once credentials exist, they appear in this list and can be located with the search box. To reach this screen, click your avatar in the top-right corner of the OS header, open your profile, select "Education" in the left navigation rail, and then click the "Credentials" sub-tab. ## Target Audience **User** — any account holder reviewing the credentials they have earned. ## Fields and Controls #### Education / Credentials / Skills sub-tabs The pill-style switcher at the top of the Education panel. "Credentials" is the middle option; the adjacent "Skills" sub-tab uses the same list-and-search layout for recorded skills. #### Search field A search input ("Search...") above the list, used to filter the credential list by keyword. #### Credential list / empty state The area below the search box lists your credentials. Until any exist, it displays the dashed empty-state card reading "Nothing to show here." ## How to Use #### Step 1: Open the Education section Click your avatar in the top-right of the header, open your profile, and choose "Education" from the left navigation. #### Step 2: Switch to Credentials Click the "Credentials" sub-tab at the top of the panel. Your earned credentials are listed here; an empty state appears if there are none yet. #### Step 3: Search When the list is populated, type in the search field to filter credentials by name. --- ## Profile: Education URL: https://ibl.ai/docs/os/profile/education # Profile: Education ![The Education tab of the User Profile dialog, showing an education entry for Columbia University with degree, dates, and grade](/images/docs/os/profile/user_profile_education.webp) ## Overview The Education tab of the User Profile dialog records your academic history. Its header reads "Review and update your academic achievements," and it lists each education entry as a card showing the institution, the degree, the date range, and the grade (for example: Columbia University — Bachelor of Science — Jan 2020 · Feb 2024 | Grade: 3.50). The panel is split into three sub-tabs: **Education** (degree history, shown here), **Credentials**, and **Skills**. The Credentials sub-tab is covered on its own page — see [Profile: Education Credentials](education-credentials.md). To reach this screen, click your avatar in the top-right corner of the OS header, open your profile, and select "Education" in the left navigation rail. ## Target Audience **User** — any account holder maintaining their own academic record. In learning deployments this information can also be visible to administrators. ## Fields and Controls #### Education / Credentials / Skills sub-tabs A pill-style tab switcher at the top of the panel. "Education" lists degree entries; "Credentials" and "Skills" list earned credentials and recorded skills respectively. #### Add button (+) The blue "+" button in the top-right corner opens the "Add education" dialog for creating a new entry. #### Education entry card Each saved entry displays an institution monogram, the institution name, the degree, the start and end dates, and the grade. Hovering an entry reveals a pencil (edit) button that reopens the same dialog pre-filled for editing. #### Add education dialog The dialog contains: a **Degree** text field (placeholder "e.g. Bachelor of Science"); a **Field of study** dropdown; an **Institution** dropdown that includes an "Add new institution" option; **Start month / Start year** and **End month / End year** dropdowns; a numeric **Grade** field; and an "**I currently study here**" toggle, which marks the entry as ongoing and disables the end date. "Save changes" saves the entry and "Cancel" closes without saving. #### Add Institution sub-dialog Choosing "Add new institution" from the Institution dropdown opens a secondary dialog where you enter the institution's name and type, then click "Save Institution" (or "Cancel" to return to the education form). ## How to Use #### Step 1: Open the Education tab Click your avatar in the top-right of the header, open your profile, and choose "Education" from the left navigation. The Education sub-tab is selected by default. #### Step 2: Add an entry Click the "+" button. Fill in the degree, field of study, and institution — adding a new institution inline if yours is not listed — plus the start date, end date (or the "I currently study here" toggle), and grade. #### Step 3: Save Click "Save changes." The new entry appears as a card in the list. To correct an entry later, hover it and click the pencil icon. --- ## Profile: Experience Resume URL: https://ibl.ai/docs/os/profile/experience-resume # Profile: Experience Resume ![The Resume sub-tab of the Experience section, showing the "No resume added yet" empty state and the Upload resume button](/images/docs/os/profile/user_profile_experience_resume.webp) ## Overview The Resume sub-tab lives inside the Experience section of the User Profile dialog, next to the Experience role list. It stores a single resume file for your account and previews it directly in the dialog once uploaded. Before a resume is uploaded, the panel shows a dashed placeholder reading "No resume added yet," with the UI note "Upload your resume to share with mentors and administrators" and a blue "Upload resume" button. An upload icon button in the top-right corner of the dialog triggers the same file picker. To reach this screen, click your avatar in the top-right corner of the OS header, open your profile, select "Experience" in the left navigation rail, and click the "Resume" sub-tab. ## Target Audience **User** — any account holder. The uploaded resume is intended for sharing with the people supporting you on the platform; the empty-state text on this screen reads "Upload your resume to share with mentors and administrators." ## Fields and Controls #### Experience / Resume sub-tabs The pill-style switcher at the top of the panel. "Resume" is the second option. #### Upload button (top-right) The blue icon button in the dialog's top-right corner opens the file picker to upload or replace your resume. #### "Upload resume" button (empty state) Shown inside the placeholder card when no resume exists. It opens the same file picker; the accepted file type is PDF. The button label changes to "Uploading..." while the file transfers. #### Resume preview After upload, the panel renders the PDF inline with paging controls (Prev / Next with a page indicator) plus zoom and rotation controls. The stored file is kept with your user files and identified as your resume. ## How to Use #### Step 1: Open the Resume sub-tab Click your avatar in the top-right of the header, open your profile, choose "Experience" from the left navigation, then click "Resume." #### Step 2: Upload your resume Click "Upload resume" (or the upload icon in the top-right corner) and choose a PDF file. The button shows "Uploading..." until the transfer completes. #### Step 3: Review it Once uploaded, the resume renders inside the panel. Use the page, zoom, and rotation controls to review it, and use the top-right upload button to replace it with a newer version. --- ## Profile: Experience URL: https://ibl.ai/docs/os/profile/experience # Profile: Experience ![The Experience tab of the User Profile dialog, showing a Software Engineer role at ibl.ai marked Present and Full Time](/images/docs/os/profile/user_profile_experience.webp) ## Overview The Experience tab of the User Profile dialog records your work history. Its header reads "Keep your professional journey up to date," and each saved role appears as a card showing a company monogram, the job title, the company, the date range, and the employment type (for example: Software Engineer — ibl.ai — Jan 2025 · Present | Full Time). The panel has two sub-tabs: **Experience** (the role list, shown here) and **Resume**, which handles resume upload and preview — see [Profile: Experience Resume](experience-resume.md). To reach this screen, click your avatar in the top-right corner of the OS header, open your profile, and select "Experience" in the left navigation rail. ## Target Audience **User** — any account holder maintaining their own professional history. ## Fields and Controls #### Experience / Resume sub-tabs A pill-style switcher at the top of the panel. "Experience" lists work entries; "Resume" manages your uploaded resume file. #### Add button (+) The blue "+" button in the top-right corner opens the "Add experience" dialog for creating a new role entry. #### Experience entry card Each saved role shows the job title, the company, the start date, either an end date or "Present" for a current role, and the employment type. Hovering an entry reveals a pencil (edit) button that reopens the dialog pre-filled for editing. #### Add experience dialog The dialog contains: a **Title** text field; a **Company** dropdown that includes an "Add new company" option for companies not yet listed; an **Employment type** dropdown (for example, Full Time); a **Location** text field; **Start month / Start year** and **End month / End year** dropdowns; and an "**I currently work here**" toggle, which marks the role as ongoing and disables the end-date fields. "Save changes" saves the entry and "Cancel" closes without saving. ## How to Use #### Step 1: Open the Experience tab Click your avatar in the top-right of the header, open your profile, and choose "Experience" from the left navigation. The Experience sub-tab is selected by default. #### Step 2: Add a role Click the "+" button. Enter the title, company (adding a new company inline if needed), employment type, location, and start date. For your current job, enable "I currently work here" instead of setting an end date. #### Step 3: Save Click "Save changes." The role appears as a card in the list. To edit it later, hover the card and click the pencil icon. --- ## Profile: History URL: https://ibl.ai/docs/os/profile/history # Profile: History ![Profile History on the Conversations tab, showing the agent, date-range, sentiment, and topic filters above a list of conversations on the left and a transcript preview on the right](/images/docs/os/profile/user_profile_history.webp) ## Overview The History page is where you review and export your own conversations with AI agents — "Review and export your conversations with AI agents." It gathers every chat you have had, across every agent, into one place you control. Two tabs divide the work. **Conversations** is the browser: filter by agent, date, sentiment, or topic, pick a conversation from the list, and read the full transcript beside it. **Exports** is the record of reports you have generated, with their status, the filters that produced them, when they expire, and a link to download them again. This page shows your own chats and nobody else's. It reads from endpoints that only ever serve the signed-in account's sessions, so there is no permission to configure and no way to reach another person's history from here — an administrator reviewing conversations for a whole agent uses [Agent Settings: Chat History](/docs/os/agent-settings/history) instead. To reach this screen, open your **Profile** and select **History**. ## Target Audience **Any User** ## Panel Reference #### Conversations / Exports tabs **Conversations** browses your chats; **Exports** lists the reports you have generated from them. #### Search Agents An autocomplete over the agents you have talked to. Picking one narrows the list to conversations with that agent. #### Pick a Date Range A two-month calendar for bounding the list to a period — the usual way to find a conversation you remember having but cannot name. #### All Sentiments Filters the list by the sentiment recorded for each conversation — positive, neutral, or negative. #### All Topics Filters by the topics detected across your conversations, so you can gather everything you discussed on one subject regardless of which agent it happened with. #### Export Generates a report of everything matching the filters currently applied. The report is built on the server and appears under the **Exports** tab when it is ready, so a large export does not tie up the page. #### Conversation list Ten conversations to a page. Each row shows how long ago it happened, a sentiment badge, the agent's name, the conversation title, and a one-line preview of the agent's first reply as plain text. #### Transcript preview ![A selected conversation showing the alternating You and agent messages with a Download button above the transcript](/images/docs/os/profile/user_profile_history_conversation.webp) The selected conversation, rendered beside the list as alternating **You** and agent messages with both avatars, formatting intact. A **Download** button saves that one conversation as a CSV. Until you pick something the pane reads "Select a conversation to view details." On a narrow screen there is no room for a second column, so selecting a conversation opens the transcript in a dialog over the list instead. #### Exports tab ![Exports tab listing generated reports with status, creation time, the filters used, expiry, and a download action](/images/docs/os/profile/user_profile_history_exports.webp) Your generated reports, newest first, each with a **Status** badge, when it was **Created**, a summary of the **Filters** it used (the agents or "All agents", the date range or "All time", plus topic and sentiment where you set them), when it **Expires**, and a **Download** button while it is still available. A report that is still building keeps a blue badge, updating on its own until it finishes. ## How to Use #### Step 1: Open your History Open your **Profile** and select **History**. It opens on **Conversations** with your most recent chats first. #### Step 2: Narrow to what you are looking for Filter by agent when you know who you were talking to, by date range when you know roughly when, or by topic when you only remember the subject. The filters combine. #### Step 3: Read the transcript Select a conversation to read it in full beside the list, formatting and both avatars intact. #### Step 4: Save a single conversation Use **Download** above the transcript to save just that conversation as a CSV. It is built in your browser and arrives immediately — nothing is queued. #### Step 5: Export a filtered set For anything larger, set the filters you want and press **Export**. The report is generated on the server and lands under **Exports**; you can leave the page while it builds. #### Step 6: Collect the report before it expires Open **Exports**, wait for the status badge to settle, and download it. Each report shows its expiry — once past, re-run the export rather than looking for the old file. ## Behavior Notes - **This is your history only.** The page reads endpoints scoped to the signed-in account, so it is hidden when someone else views your profile, and it can never show another person's conversations. Cross-user review is a separate, permission-gated surface. - **The two save paths are different.** **Download** in the transcript preview builds a CSV of one conversation in the browser, immediately. **Export** in the filters row creates a server-side report of the whole filtered set, which takes time and is listed with an expiry. - **Exports keep their own filter record.** Each row states the filters that produced it, so a report downloaded weeks later can still be read for what it actually covers. - **List previews are plain text, transcripts are not.** The one-line preview in the list strips formatting so rows stay a single line; the transcript beside it renders the message as written. - **Sentiment and topics come from analysis, not from you.** Both filters are populated from what the platform detected across your conversations, which is why the available values differ from one account to another. ## Building Chat History Into Your Own App The History surface ships in the ibl.ai SDK as a tab of the Profile component, so users of a product you build can review and export their own conversations there. Install the [iblai/vibe](https://github.com/iblai/vibe) skills and render the Profile targeting its chat-history tab; the data-layer hooks behind it are exported too, if you would rather build the screen yourself on the same endpoints. The endpoints are user-scoped by design — they serve only the authenticated caller's sessions — so an administrative view over everyone's conversations is a different surface, built from the agent History tab instead. The reusable skill for this workflow is [`iblai-vibe-history`](https://github.com/iblai/vibe/tree/main/skills/iblai-vibe-history), and the SDK overview is at [Vibe SDK](/developer/platform/vibe-sdk). --- ## Profile: Memory URL: https://ibl.ai/docs/os/profile/memory # Profile: Memory ![The Memory tab of the User Profile dialog, with two personalization toggles and a My Memories list of saved facts](/images/docs/os/profile/user_profile_memory.webp) ## Overview The Memory tab of the User Profile dialog controls what the platform's AI agents remember about you across conversations. Its header reads "Manage what the AI remembers about you," and it combines two personalization toggles with a reviewable list of every saved memory. Memories are short facts — preferences, context about you or your organization, formatting choices — that agents can capture automatically from chats or that you add by hand. Each entry in the list shows its text and the date it was created; automatically captured memories are marked with a bot icon and an "auto" badge, while manually added ones carry a person icon. To reach this screen, click your avatar in the top-right corner of the OS header, open your profile, and select "Memory" in the left navigation rail. ## Target Audience **User** — any account holder. Memory settings apply to your own account's conversations with AI agents. ## Fields and Controls #### Allow AI to learn from our conversations A toggle controlling automatic memory capture. Per the on-screen description: "When enabled, the AI will remember useful information from your chats to provide better assistance." Turning it off stops agents from saving new memories automatically; it does not delete existing ones. #### Use my saved information in responses A toggle controlling whether saved memories are injected into responses. Per the on-screen description: "When enabled, the AI will use what it knows about you to personalize responses." Turning it off leaves memories stored but unused. #### My Memories list Every saved memory appears as a row with its content and creation date. Auto-captured memories show a bot icon plus an "auto" badge; manually added memories show a person icon. Hovering a row reveals a delete button that removes that memory permanently. #### Add Memory The "+ Add Memory" button opens a dialog where you type a new memory as free text. The content must be at least 10 characters long; on save it joins the list as a manually added memory. ## How to Use #### Step 1: Open the Memory tab Click your avatar in the top-right of the header, open your profile, and choose "Memory" from the left navigation. #### Step 2: Set your personalization preferences Use the two toggles to decide whether agents may capture new memories from your chats, and whether they may use saved memories to personalize responses. The two controls are independent. #### Step 3: Curate the memory list Review the "My Memories" list. Click "Add Memory" to record a fact you want agents to know (at least 10 characters), and hover any entry and use its delete control to remove memories that are outdated or that you prefer not to keep. --- ## Profile: Privacy URL: https://ibl.ai/docs/os/profile/privacy # Profile: Privacy ![The Privacy tab of the User Profile dialog, showing the Default Private Mode options: Normal, Anonymized, and Disabled](/images/docs/os/profile/user_profile_privacy.webp) ## Overview The Privacy tab of the User Profile dialog sets your default Private Mode — how your conversations with AI agents are recorded. Its header reads "Set your default Private Mode and review what each option does to your conversations with AI agents." The setting chosen here is a default, not a lock. As the on-screen description states, you can switch any individual chat into Private Mode from the chat header, and an agent or your organization can override the default for specific conversations. To reach this screen, click your avatar in the top-right corner of the OS header, open your profile, and select "Privacy" in the left navigation rail. ## Target Audience **User** — any account holder deciding how much of their conversation history is retained. Organization administrators can additionally impose overrides at the agent or organization level. ## Default Private Mode Options The three options are mutually exclusive; the selected one is highlighted with a check mark. In the screenshot, "Normal" is selected. #### Normal Per the on-screen description: "Conversations are saved to your history and linked to your account. Agents use prior turns in the same conversation for context." This is the standard mode — full history, full in-conversation context. #### Anonymized Per the on-screen description: "Conversations are saved for AI context but stripped of identifying account info. Agents still use prior turns in the same conversation." Content is retained for context, but without the link to your identity. #### Disabled Per the on-screen description: "Nothing is recorded. Every message is a single-turn Q&A — agents can't reference earlier messages, even within the same conversation." This is the strictest mode: no history and no multi-turn context at all. ## How to Use #### Step 1: Open the Privacy tab Click your avatar in the top-right of the header, open your profile, and choose "Privacy" from the left navigation. #### Step 2: Choose a default mode Click Normal, Anonymized, or Disabled. The selected card is highlighted and becomes the default recording behavior for your future conversations with agents. #### Step 3: Override per conversation when needed For any single chat, use the Private Mode control in the chat header to depart from your default. Note that an agent or your organization may also enforce a specific mode for particular conversations. --- ## Profile: Purchases URL: https://ibl.ai/docs/os/profile/purchases # Profile: Purchases ![The Purchases tab of the User Profile dialog, with search, status and type filters, and the "No purchases found." empty state](/images/docs/os/profile/user_profile_purchases.webp) ## Overview The Purchases tab of the User Profile dialog lists your subscriptions and one-off purchases on the platform. Its header reads "View and manage your subscriptions and purchases," and it combines a search box with status and type filters over the purchase list. Each purchase renders as a card showing the item name, an item-type badge, the price plan name with its amount and billing interval, and — for subscriptions — the next renewal date (labeled "Renews:" for active plans or "Expires:" for plans set to cancel at period end). Clicking a card opens the purchase's details. Long lists paginate with Prev/Next controls. To reach this screen, click your avatar in the top-right corner of the OS header, open your profile, and select "Purchases" in the left navigation rail. ## Target Audience **User** — any account holder reviewing what they have bought or subscribed to. (Organization-level billing lives in the organization administration screens, not here.) ## Fields and Controls #### Search purchases A search field ("Search purchases...") that filters the list by keyword. When a search yields nothing, the empty state reads "No purchases match your search." #### Status filter A dropdown defaulting to "All Statuses," with options Active, Trialing, Canceled, and Past Due to filter subscriptions by their billing state. #### Type filter A dropdown defaulting to "All Types," filtering by what the purchase is for. Options are "Mentor" (an individual AI agent, as labeled in the UI), Course, Program, and Pathway. #### Purchase count A counter on the right (for example, "0 purchases") showing how many items match the current search and filters. #### Purchase list / empty state Matching purchases appear as clickable cards below the filters; with no purchases, the dashed placeholder shows a shopping-bag icon and "No purchases found." Paginated results add Prev/Next buttons with a page indicator. ## How to Use #### Step 1: Open the Purchases tab Click your avatar in the top-right of the header, open your profile, and choose "Purchases" from the left navigation. #### Step 2: Find a purchase Type in the search box or narrow the list with the status and type dropdowns. The counter updates to show how many purchases match. #### Step 3: Review details Click any purchase card to open its details, including the plan, amount, billing interval, and renewal or expiry date. --- ## Profile: Security URL: https://ibl.ai/docs/os/profile/security # Profile: Security ![The Security tab of the User Profile dialog, showing the Security Settings card with the Send Password Reset Link button and Delete account link](/images/docs/os/profile/user_profile_security.webp) ## Overview The Security tab of the User Profile dialog handles password resets and account deletion. Its header reads "Update your security settings and password," and the panel centers on a "Security Settings" card with a shield icon. Password changes are done through an emailed reset link rather than an in-dialog form: the card's text reads "Click to reset your password," and the button below it sends the link to your account email. The tab intentionally has no "Save Changes" button — its actions take effect immediately. To reach this screen, click your avatar in the top-right corner of the OS header, open your profile, and select "Security" in the left navigation rail. ## Target Audience **User** — any account holder managing their own credentials. Deleting an account is self-service and does not require an administrator. ## Fields and Controls #### Send Password Reset Link The primary button on the Security Settings card. Clicking it sends a password-reset link to your account email; while the request is processing the label changes to "Sending Password Reset Link..." and the button is disabled. Follow the emailed link to set a new password. #### Delete account A low-emphasis link in the bottom-right corner of the card. Clicking it opens a confirmation dialog titled "Are you sure?" with the warning: "This will permanently delete your account and all associated data. This action cannot be undone. You will be logged out upon successful deletion." The dialog offers "Cancel" and "Yes, Delete My Account"; confirming shows "Deleting..." and then logs you out. ## How to Use #### Step 1: Open the Security tab Click your avatar in the top-right of the header, open your profile, and choose "Security" from the left navigation. #### Step 2: Reset your password Click "Send Password Reset Link." Check the inbox of the email address on your account and follow the link to choose a new password. #### Step 3: Delete the account (only if intended) Click "Delete account," read the warning, and confirm with "Yes, Delete My Account." This permanently removes the account and all associated data, cannot be undone, and ends your session immediately. Click "Cancel" to abort. --- ## Profile: Social Accounts URL: https://ibl.ai/docs/os/profile/social # Profile: Social Accounts ![The Social tab of the User Profile dialog, with Facebook, LinkedIn, and X URL fields](/images/docs/os/profile/user_profile_social.webp) ## Overview The Social tab of the User Profile dialog stores links to your social media profiles. Its header reads "Connect and manage your social media accounts," and it presents one URL field per supported network. Three networks are supported: Facebook, LinkedIn, and X (formerly Twitter). Each field is pre-filled with the network's base URL — `https://facebook.com/`, `https://linkedin.com/in/`, and `https://x.com/` — so you only need to complete the path to your own profile. To reach this screen, click your avatar in the top-right corner of the OS header, open your profile, and select "Social" in the left navigation rail. ## Target Audience **User** — any account holder maintaining their own profile. ## Fields and Controls #### Facebook A URL field with a Facebook icon, pre-filled with `https://facebook.com/`. Enter the full URL of your Facebook profile. #### LinkedIn A URL field with a LinkedIn icon, pre-filled with `https://linkedin.com/in/`. Enter the full URL of your LinkedIn profile (for example, `https://linkedin.com/in/your-handle`). #### X A URL field with an X icon, pre-filled with `https://x.com/`. Enter the full URL of your X profile. #### Save Changes / Cancel "Save Changes" persists the three URLs to your profile; "Cancel" discards unsaved edits. Both buttons sit at the bottom-right of the dialog. ## How to Use #### Step 1: Open the Social tab Click your avatar in the top-right of the header, open your profile, and choose "Social" from the left navigation. #### Step 2: Enter your profile URLs Complete each pre-filled base URL with your own handle or path. You can fill in any subset of the three networks. #### Step 3: Save Click "Save Changes" to store the links, or "Cancel" to discard them. --- ## Common Components URL: https://ibl.ai/docs/os/common-components/overview # Common Components ## Overview Many of the surfaces documented in this section are not unique to OS — they are shared components that ship from ibl.ai's common component library (`@iblai/iblai-js`) and appear consistently across ibl.ai applications. When a component is improved in the shared library, every application that uses it picks up the change. That is why the user profile dialog, the notification center, the analytics dashboards, and the organization settings dialogs look and behave the same wherever you encounter them. This section will collect dedicated documentation for each common component as the set grows. Today, each shared component is documented in context on the screen where you use it. ## Target Audience **User** | **Administrator** | **Developer** ## Shared Components in OS #### User Profile Dialog The profile dialog — Basic Information, Education, Experience, Resume, Social, Memory, Privacy, Security, and Purchases — is a shared component. It is documented under [Profile](../profile/basic.md). #### Notification Center The notification inbox and alert-template management render from the shared library. They are documented under [Notifications](../notifications/inbox.md). #### Analytics Dashboards The Overview, Users, Topics, Transcripts, Costs, Data Reports, and Audit dashboards are shared analytics containers. They are documented under [Analytics](../analytics/overview.md). #### Organization Settings Dialogs The organization administration tabs — Users, Groups, Teams, Roles, Policies, Alerts, integrations, Billing, and Monetization — ship from the shared library. They are documented under [Your Organization Settings](../organization-settings/organization.md). ## Related Resources #### Source Repositories The OS application lives at [github.com/iblai/os](https://github.com/iblai/os). Companion tooling lives in [github.com/iblai/vibe](https://github.com/iblai/vibe) — the SDK and build skills for ibl.ai applications, plus the headless agent skills and chat MCP server for the platform API. ---