User Portal¶
The user portal is the day-to-day interface for analysts, engineers, and other data consumers. It provides access to AI-generated assets, curated collections, managed resources, shared content, knowledge capture, prompt templates, and personal activity analytics.
The sidebar is divided into User pages (described here) and Admin pages (see Admin Portal).
Activity¶
The Activity page shows your personal tool usage analytics across configurable time ranges (1h, 6h, 24h, 7d).


The page includes:
- Summary cards — Total calls, average duration, and tools used in the selected window
- My Activity chart — Timeseries of your tool call volume (green) with errors highlighted (red)
- Top Tools — Horizontal bar chart of your most-used tools
Assets¶
The Assets page displays interactive dashboards, reports, and visualizations generated by AI agents during sessions. Assets are saved via the save_artifact tool and support multiple content types.


Features:
- Search — Full-text search by name or description
- Filters — Content type dropdown (HTML, JSX, SVG, Markdown, CSV) and tag filter
- View toggle — Switch between grid (card thumbnails) and table view; preference persisted to localStorage
- Grid cards — 4:3 thumbnail previews with content type icon, tags, collection badges, file size, and sharing indicators
- Theme-aware thumbnails — Markdown and CSV previews are captured in both light and dark variants, and the grid shows the one matching your active theme. Self-themed content (HTML, JSX, SVG) carries its own colors, so a single preview is used in both modes. Public shares always use the light variant.
- Table rows — Sortable columns for name, type, tags, collections, size, sharing, and creation date
Asset Viewer¶
Click any asset to open the full-screen viewer. The viewer renders content natively based on type — HTML and JSX as interactive components, SVG as vector graphics, Markdown with full formatting, and CSV as sortable tables.


The viewer provides:
- Preview / Source toggle — Switch between rendered output and raw source code
- Actions — Delete, Download, and Share buttons
- Owner display — Shows the asset owner's email address
The Share action opens a dialog to mint a link or a user-scoped share, with an optional expiration, a copy-once token, and a per-link access count. Every share carries an access mode that decides who the link opens for:
| Mode | Who can open the link |
|---|---|
restricted |
Only the named recipient (and the person who created the share) |
authenticated |
Any signed-in platform user |
public |
Anyone with the link, without signing in |
Sharing with a person makes the share restricted: the link resolves only for that recipient, signed in, so forwarding the email or the URL grants nothing. The Share by Link section mints a link for any signed-in user by default; choosing Anyone with the link makes it public and shows a warning that the link opens without sign-in. A signed-in user who is not the recipient of a restricted share sees a branded page naming the account they are signed in as, with a sign-out-and-switch action, rather than a generic not-found.
A recipient who opens a non-public share while signed out lands on a branded page with a Sign in action that returns them to the shared item after authenticating. When the share names an email address, the same page also offers Email me a one-time view link for recipients who have no platform account: a single-use link is emailed to the address the share names (never to an address the visitor types), expires in 15 minutes, and opens a view-only guest session scoped to that one share for the current browsing visit. Guests see the shared item (and, for collection shares, its items) with a "Viewing as guest" indicator; they can download but not edit, even when the share grants Editor, and they never gain portal access. A forwarded or replayed link is dead after its first use, and revoking the share cuts off existing guest sessions immediately. The recipient can request a fresh link for each viewing session, which keeps an email share strictly safer than a public URL.


All content types are rendered inline:
Interactive dashboards with KPI cards, charts, and tables rendered as live HTML.


React components rendered with live state and interactivity (tabbed views, filters).


Vector graphics — charts, diagrams, and data visualizations rendered at full resolution.


Formatted text with headings, tables, lists, code blocks, and mermaid diagrams.


Tabular data rendered as a sortable, searchable table.


Collections¶
Collections let you organize related assets into curated, shareable groups with rich descriptions and ordered sections.


The collections list shows:
- Search — Filter collections by name or description
- New Collection button — Creates a collection and opens the editor
- View toggle — Grid or table view
- Grid cards — Thumbnail mosaic of contained assets, collection name, description, tags, sharing indicators, and creation date
Viewing a Collection¶
Click a collection to open the viewer, which renders the full collection with sections, markdown descriptions, and asset cards.


The editor arranges a collection into drag-and-drop sections of assets, with a markdown description and thumbnail-size settings.


- Section navigation — Each section has a title, markdown description, and ordered asset list
- Asset cards — Thumbnail previews with name, description, content type badge, and file size
- Thumbnail size — Configurable per collection (Large, Medium, Small, None) via Settings
- Actions — Back, Edit, Share, and Delete
Click any asset card to open it in the asset viewer:


Sharing Collections¶
Collections use the same sharing system as individual assets:
- Links: time-limited token URL, opening for signed-in users or, by explicit choice, for anyone
- User shares: share with specific email addresses, restricted to that recipient, with Viewer or Editor permission. The email field suggests known teammates as you type (name + email, with an "Invited" badge for people an admin pre-added who have not signed in yet); you can still type any email that is not in the directory
- Share management: view active shares with their access mode, copy links, revoke access
Resources¶
Resources are human-uploaded reference materials — SQL templates, runbooks, checklists, and brand assets — that AI agents can access during sessions via the MCP resources/read protocol.


Uploading opens a modal for the file plus its category, display name, description, and tags.


The Resources page provides:
- Scope tabs — My Resources, admin, and Global tabs for filtering by visibility scope
- Search and filter — Text search and category dropdown
- Upload button — Upload new resources with name, description, category, and tags
- Resource table — Name, category, MIME type, tags, file size, uploader email, and last updated date
- Delete — Trash icon to remove owned resources
Shared With Me¶
Items that other users share with you appear in the corresponding pages, filtered by ownership scope:
- Assets: the Assets page has a Mine / Shared / All scope control. Shared assets show content type badges, tags, sharer email, permission level (Viewer/Editor), file size, and share date
- Collections: the Collections page has the same Mine / Shared / All scope control, listing shared collections with sharer and access level
- Prompts: the Prompts page has a Shared tab. These are real runnable prompts: your agent can invoke a shared prompt over MCP as
shared-<name>


Click any shared asset to open it in the viewer:


Feedback¶
Feedback lets the people who review your work, including subject-matter experts and stakeholders who do not use an agent, leave structured corrections and questions on the things you share with them, instead of relaying that feedback over email.
Feedback is organized into threads. A thread targets one asset, collection, prompt, or knowledge page, or it lives on a standalone channel for general feedback not tied to a single object. Each thread has a kind (comment, question, correction, rating, approval, rejection, or suggestion), a status (open, answered, resolved, won't fix, acknowledged), an optional requires_resolution flag, and a timeline of events (the opening message plus replies and status changes). A thread can be anchored to a specific selection within the target so a correction like "we don't use that term" stays pinned to the place it refers to, along with the version it was raised against. Standalone-channel threads are visible to every signed-in user; feedback on an asset, collection, or prompt is visible to people who can already view that object; knowledge pages are org-shared, so any signed-in user can read and add feedback on them.
The feedback panel¶
Open the Feedback button in an asset, collection, prompt, or knowledge-page viewer to slide out the feedback panel. It lists the threads on that item with their kind, status, and activity, and a header counts how many are open and how many still need resolution. Selecting a text passage in markdown or plain-text content (an asset, a prompt, or a knowledge page) before opening New lets you anchor your feedback to that selection. In the Knowledge hub, each knowledge-page card shows an open-thread badge so you can see where feedback is waiting.


Opening a thread shows its full timeline. Anyone can reply; the item's owner, an editor, or an admin can change the status (for example resolve it) or delete the thread. The status change is recorded on the timeline.


Turning feedback into knowledge¶
A correction or suggestion is only useful if it can change something. When you have apply_knowledge access, an unresolved correction or suggestion thread shows a Capture as insight action in its detail view. Capturing it creates a pending insight from the thread (its title and first comment) that enters the review queue alongside insights captured by agents, and resolves the thread with a link to that insight. From there the normal apply_knowledge review and promote/apply pipeline takes over: once the insight is promoted to a knowledge page or applied to the catalog, the thread's knowledge chain shows the resulting change, closing the loop for both the reviewer and the person who raised the feedback. This is how feedback on any content becomes durable, reviewed knowledge rather than a dead-end comment.
The Feedback page in the sidebar is the standalone channel for general feedback. The My Assets and Collections lists show an open-thread badge on items you own so you can see at a glance where feedback is waiting.


Leaving feedback through a public link¶
When you share an asset or collection with a public link, an anonymous visitor can view it and sees a Sign in to leave feedback prompt. Signing in through that link, when the visitor has no prior share for the item, grants them a viewer share automatically so the item appears in their portal and they can leave feedback. An existing editor is never downgraded to a viewer by this flow.
Knowledge¶
The Knowledge page is the single home for the Memory to Insight to Knowledge lifecycle. A short header teaches the model so a first-time reader can state what each stage is and how one becomes the next:
Everything the platform learns is a Memory. Most memories are personal or operational and stay yours. When a memory asserts something true about the business or the data that others would benefit from, it becomes an Insight, a proposal awaiting review. Whoever holds the
apply_knowledgecapability reviews insights and promotes the good ones into Knowledge: shared, trusted, and canonical. Business and domain facts become knowledge pages; technical and entity facts go to the DataHub catalog.
The page has three tabs. Review and promote affordances appear only when your persona grants the apply_knowledge tool (a capability check, not an admin role).
Knowledge (default)¶
- Unified search - One query fans across every source you can access (the DataHub catalog, canonical knowledge pages, your memory, captured insights, saved assets, prompts, API endpoints, and connections) and returns results grouped by source with a coverage summary. It is the same federation behind the
searchtool, exposed overGET /api/v1/portal/search. It ranks semantically when an embedding provider is configured and degrades to lexical search otherwise - Browse - With the search box empty, the tab browses the canonical knowledge pages. Personas with
apply_knowledgecan create, edit, and remove pages - Changesets (
apply_knowledgeholders) - The record of insights promoted into knowledge: the catalog and knowledge-page changes applied when your agent runsapply_knowledge, with rollback to undo a changeset's writes. They live here, with the promoted knowledge, rather than with the unpromoted insights in the review pipeline
One query returns results grouped by source (catalog, knowledge pages, insights, memory, assets, prompts) with a per-source coverage summary and source filter chips.


Catalog¶
The Catalog sub-tab brings the DataHub catalog into the portal: pick a DataHub connection, then browse or search its datasets and open one to see its description, tags, owners, glossary terms, domain, and columns. When your persona grants datahub_update and the connection is write-enabled, each metadata facet is editable inline (description, tags, owners, glossary terms, domain); otherwise the view is read-only with no edit controls. Tags, glossary terms, and domains are chosen through name-search pickers: type a display name (e.g. Reven) and select Revenue, and the URN is resolved for you. Owners are entered as a DataHub user or group URN (urn:li:corpuser:<name> or urn:li:corpGroup:<name>); an invalid value is rejected with a clearly visible inline error rather than silently failing. DataHub has no dataset create or delete (datasets originate in source systems), so this is metadata editing, not dataset lifecycle. The tab is URL-addressable at /knowledge/catalog.
Context Docs¶
The Context Docs sub-tab manages DataHub context documents: markdown notes attached to a dataset, glossary term, glossary node, or container. Browse or search a connection, open a document to read its rendered markdown, and, with the matching datahub_create / datahub_update / datahub_delete grant on a write-enabled connection, create, edit, and delete documents through a markdown editor. A document can attach only to the supported entity types; the create form rejects any other type. The tab is URL-addressable at /knowledge/context-docs.
Both tabs are backed by the portal DataHub REST API at /api/v1/portal/datahub/{connection}/.... Reads require DataHub access on your persona; a write is permitted only when your persona grants the matching MCP tool and the target connection is write-enabled (read_only: false). Both checks are enforced server-side regardless of what the UI shows, and every write is recorded in the audit log. Tag and glossary-term edits are applied as batched add/remove sets so concurrent edits do not clobber one another. The pickers are backed by name-search lookup endpoints (catalog/lookup/tags, catalog/lookup/glossary-terms, catalog/lookup/domains). A malformed metadata value is rejected with 400 Bad Request; 502 Bad Gateway is reserved for genuine upstream DataHub failures.
Insights¶
The review pipeline for insights, which are the only memories that cross between users. A pending-review count is badged on the sidebar Knowledge item and the Insights tab so reviewers notice work without opening it.
- Your insights - The insights captured from your sessions, with status (pending, approved, applied, rejected) and relevance search
- Review queue (
apply_knowledgeholders) - Every user's captured insights. Approving and rejecting curates which insights are worth promoting; the actual promotion into durable knowledge happens when you ask your agent to runapply_knowledge, whose synthesize step gathers the approved insights and writes business and domain facts to knowledge pages and technical and entity facts to the DataHub catalog


Memory¶
Memory is personal: this tab is scoped to your own records. The only memory that crosses to other users is an insight, reviewed in the Insights tab.
- Your memory - The raw substrate captured from your sessions, classified by lifecycle class (
sink_class): Preference, Event, Business knowledge, Operational rule, and Schema/entity. The class is why something is "just memory" versus a candidate for promotion


The former Knowledge Pages, Knowledge & Memory, and admin Knowledge & Memory routes now redirect into this one page.
See Knowledge Capture and Memory Layer for how these are created during sessions.
Prompts¶
Prompts are reusable templates that guide AI agent behavior. Users can create personal prompts and browse available global and persona-scoped prompts.


Creating a prompt uses an inline markdown editor that auto-extracts {argument} placeholders into a typed arguments table.


Opening a prompt shows its rendered content, arguments, and actions (copy, save-as-asset, share, request promotion, edit, delete).


Three tabs:
- Personal: your own prompts with create, edit, and delete actions
- Available: global and persona-scoped prompts you can view and use
- Shared: prompts other users shared with you, with sharer and access level
Features:
- Search — Type a phrase to rank prompts by relevance to what you mean, not just literal substrings. Results span every prompt you can see (your personal, global, and persona prompts), are ranked best-first, and only include approved prompts. Ranking is semantic (vector similarity) when an embedding provider is configured, with a keyword fallback otherwise.
- Sortable columns — Name, scope, description, category (browse mode; search mode preserves relevance order)
- Expandable rows — Click the chevron to see the full prompt content, arguments, and copy-to-clipboard button
- Scope badges — Personal (gray), Global (blue), Persona (purple), System (amber)
- Status badges — Lifecycle state shown on the prompt viewer: draft (gray), approved (emerald), deprecated (amber), superseded (rose)
- Tags — Free-form, comma-separated labels for organizing prompts, set on create and edit and shown as chips
- New Prompt — Create prompts with name, display name, description, content (supports
{arg}placeholders), category, and tags - Request Promotion — On your own personal prompt, ask an admin to promote it to a persona (you choose which) or to global scope. The prompt stays personal and shows a "Promotion requested" badge until an admin approves or rejects it in the admin review queue.
- Share — Share your prompt directly with another user by email. The recipient gets a real, runnable prompt (with its arguments intact), not a markdown snapshot. "Save as Asset" remains a separate action for exporting the content as a markdown asset.
Sharing a prompt¶
Open your prompt and choose Share, then enter a recipient's email. The recipient sees it on the Prompts page's Shared tab and their agent can run it over MCP as shared-<name> (auto-deduplicated if names collide). Sharing is owner-initiated and does not require admin approval; revoke a share any time from the Share dialog. Markdown export ("Save as Asset") is a distinct action for documentation or external sharing.
Requesting promotion¶
A personal prompt is yours alone. To make it available to your team or the whole organization, open it and choose Request Promotion, then pick a target: one or more personas, or global. An admin reviews the request and, on approval, the prompt moves to the requested scope and becomes a real shared prompt. Scope promotion is admin-only; requesting it is the self-service path.
Personal naming and scope prefixes¶
Personal prompt names are unique per owner, so two users can each have a prompt named report without colliding. When prompts are served to an AI agent over MCP, names are prefixed by scope so they never clash across users or personas:
- Personal prompts appear as
personal-<name>(for example,personal-report) - Persona prompts appear as
<persona>-<name>(one entry per persona you belong to, for exampleanalyst-report) - Global prompts appear as
global-<name> - Prompts shared with you appear as
shared-<name>
These prefixes are computed at serve time; the stored name stays bare. To make a personal prompt visible at the persona or global scope, rename it if a prompt with that name already exists at the target scope.
Settings¶
The Settings page (user section of the sidebar) holds per-user preferences. The Notifications section controls email notifications: a delivery mode (Off, Immediate, or Daily digest) and per-category toggles for shares and comments/feedback. Defaults are immediate delivery with all categories enabled; changes save as they are made.