projects catalog in full. Product semantics, lifecycles, and permission boundaries for additional catalogs will be added here later.
Workspace Catalog Index
A catalog name identifies a storage scope type, not a business entity type. A plugin project, case, due-diligence engagement, or customer delivery can all bind to the
projects catalog through this design.When To Use projects
Prefer projects when a plugin business entity has these characteristics:
- it owns an isolated set of input files, parsed results, and exports;
- its Primary Agent and specialist subagents must read the same files;
- multiple Assistants explicitly connected to the same platform Project must share those files;
- it can have multiple conversations while remaining isolated from other business entities;
- users need to see, enter, archive, and restore the space from the platform Projects surface;
- the plugin expects Agent file-understanding tools to search every file in the current Project by default.
xperts only when files inherently belong to the entire Assistant and may be shared across business instances. Do not place data that requires Project isolation in the Assistant-wide folder merely to avoid Project provisioning and synchronization.
Two File-Sharing Layers
Theprojects catalog supports two sharing layers without merging all Assistant state:
A shared platform Project is not a shared conversation or capability graph. Conversations remain scoped by
xpertId + projectId. Two Assistants can read the same Project file while retaining separate histories and different least-privilege tool sets.
Product Objects And Identity Model
The plugin business entity and the platform Chat Project are separate objects. They have a one-to-one mapping but must use two distinct identifiers:
Business APIs, View selection, and domain relations continue to use
businessEntityId. Workspace Files, FileAssets, conversations, and Agent runs use workspaceProjectId. Never let one field alternate between these meanings across interfaces.
Persist the following fields on the business entity:
workspaceProjectId. A DTO may expose it to the frontend for navigation, but business mutations must still submit the business entity identifier.
Provisioning And Synchronization Lifecycle
When creating a business entity, generate two distinct stable UUIDs and persist the mapping before provisioning the platform Project:- Generate
businessEntityIdandworkspaceProjectId. - Save the business entity with status
provisioning. - Call
platform.project.provisioning.ensure(...). - Let the platform create or reconcile the Project with the caller-supplied
workspaceProjectIdand connect the intended Assistants. - Set the entity to
readyafter all required connections succeed; set it tofailedand save a displayable error after a failure. - Allow uploads and file-dependent workflows only in the
readystate.
ensure accepts the desired state, so retries with the same identifier do not create duplicate Projects:
ensure preserves existing Assistant connections and adds the requested xpertId; it does not replace the complete connection set. If the product supports removing an Assistant, use a separate authorized Project membership operation.
The business entity is authoritative for name and archive state. Run ensure again after rename, archive, or restore. A synchronization failure does not roll back an accepted business operation; retain the failed state and provide an explicit retry.
Define deletion as a separate product policy. Archive does not delete files. Before supporting permanent deletion, document retention for business data, Workspace Files, FileAssets, conversations, and audit records.
File Layout And Portable References
Use a stable plugin-owned namespace inside the platform Project:projects scope. Persist only a Workspace Files portable reference and necessary business metadata. Do not persist host absolute paths, /workspace/... sandbox paths, raw Buffers, or Base64 content.
File Parsing And Agent File Understanding
After upload, awaitunderstandFile(...) until it returns the FileAsset, then persist the source version. Platform parsing may remain asynchronous with runInline: false; the requirement is to await durable FileAsset creation rather than detach the registration call.
Conversation And Agent Run Binding
Declare the Project workspace policy on every participating Assistant:project-required rejects file-dependent execution without a trusted projectId and does not fall back to xperts. Use project-preferred only when compatibility fallback is intentional. The policy alone does not grant Project access; the Assistant must also be explicitly connected to the platform Project.
Pass the same workspaceProjectId through every execution entry point:
- new or restored Primary conversations for every connected Assistant;
- Assistant Tasks started by the plugin;
- specialist subagents in workflows;
- cross-Assistant handoffs, retries, and manual reruns;
- sandbox and runtime Workspace Files operations.
projectId when creating a conversation. Never rebind an existing conversation to another Project. Reject execution when the route, request, and persisted conversation Project do not agree.
For a cross-Assistant handoff, create or select a conversation for the target xpertId + projectId; do not reuse the source Assistant conversation. Passing the same trusted workspaceProjectId lets the target Assistant read the shared files while retaining its own conversation and execution history.
In Project mode, file-understanding tools resolve one visibility set:
- every FileAsset in the current Project;
- explicit attachments linked to the current conversation;
- duplicates removed.
parsed_file_list, parsed_file_search, parsed_file_search_all, parsed_file_read, and preview must use the same set. The model cannot select another Project. A cross-Project FileAsset identifier must return a uniform inaccessible or invisible result without disclosing whether the file exists.
Workbench Navigation And Conversation Restore
When a plugin View enters a ready business entity, ask the host to open the platform Project for the current Assistant:xpertId + projectId, and restores the most recent Primary conversation or creates one when no history exists. Do not construct host routes inside the plugin or confuse a business entity identifier with the platform Project identifier.
One platform Project can connect multiple Assistants, and each Assistant can own multiple Primary conversations. History, recent conversations, and new conversations must remain filtered by the combined Assistant and Project boundary; shared files do not merge conversations.
Permission And Trust Boundaries
- Catalog, tenant, organization, user, platform Project, and Assistant identities must come from trusted runtime context or a server-side business mapping, never from model-selected arguments.
- Keep
tenantId,catalog,scopeId,projectId, andxpertIdout of Agent-visible tool parameters. - Revalidate plugin-domain access, user Project membership, and the current Assistant’s explicit Project connection on every read, write, parse, search, preview, and download.
- Platform Project permission does not replace plugin-domain permission. The plugin still verifies that the current user may access the corresponding business entity.
- Keep the business
scopeKeyisolated by Assistant/Xpert. A runtime Project identifier selects only the workspace scope and must not replace the Assistant isolation key for plugin business data. - Do not distinguish “exists in another Project” from “does not exist” in error messages.
Failure States And User Experience
When Project synchronization succeeds but File Understanding is still running, show file parsing status separately. Do not report it as a Project provisioning failure.
Rollout And Migration
Do not silently reinterpret existingxperts references as Project references or fall back to the Assistant-wide folder after Project synchronization fails. Choose an explicit rollout policy: perform an auditable file and record migration, keep old records read-only, or allow only newly created business entities to use Project space. In every case, let users identify the scope of legacy data and verify that files cannot leak across Projects.
Acceptance Checklist
- One business entity maps to one stable
workspaceProjectId, and retries do not create duplicate platform Projects. - The Project appears in the platform Projects surface and connects every intended Assistant.
- Two connected Assistants can search, read, and preview the same FileAsset without copying it.
- An unconnected Assistant cannot access files even when given the Project or FileAsset identifier.
- Connected Assistants share Project files but retain separate
xpertId + projectIdconversation histories. - Business rename, archive, and restore synchronize to the platform Project.
- Uploaded files, portable references, FileAssets, and exports all belong to the mapped Project.
- Primary, interpretation, planning, and authoring Agents can search the same Project files.
- A FileAsset from another Project cannot be read and does not leak its existence.
- A conversation’s Project binding is immutable.
- A
project-requiredAssistant rejects file-dependent execution without a Project. - Assistants that do not use Projects retain existing conversation or
xpertsbehavior.
Template For Future Catalog Sections
When adding another workspace catalog to this page, answer at least these questions:- Scope identity: Which stable identifier locates the catalog? Is
scopeIdalso required? - Ownership: Is it owned by a user, Assistant, organization, knowledgebase, or another product object?
- Lifecycle: Who drives create, rename, archive, restore, and delete?
- Sharing model: Which conversations, Agents, Assistants, users, or plugins can see the same file set?
- Runtime selection: How is the catalog selected from trusted context? Is fallback allowed when it is absent?
- File Understanding: What are the FileAsset visibility, attachment merge, and deduplication rules?
- Permission boundary: How do tenant, organization, user, and domain permissions combine?
- Path convention: How do plugins allocate directories, and which references may be persisted?
- Retention and migration: How are old catalog files migrated, deleted, and governed?
- Acceptance matrix: How are same-scope sharing, cross-scope isolation, idempotent retries, and regression behavior verified?