create_share_link
Additive write · Idempotent
Create an anonymous share link for a dashboard, a chat, OR a skill (pass exactly one of dashboardId/chatId/skillId). Returns a token; the public URL is {origin}/s/{token}. ONE link per resource: if an active link already exists its token is returned (existing:true) instead of minting another — revoke_share_link first to get a fresh URL. Refuses when the workspace admin has turned external share links off. Dashboard links show the published baseline (the last refresh at default parameters) with a “data as of” stamp — no account, no editing, no filters, no chat. Chat links show a read-only view of the conversation as it CURRENTLY is (live, not a snapshot — turns added later are visible too); viewers cannot reply. Skill links render the skill’s markdown document read-only, live. Sharing grants viewing only; to let someone EDIT, invite them to the workspace instead. Dashboards and skills require edit access on that object (owner, editor grantee, an editor workspace default, or a workspace admin); chats can only be shared by their owner. Archived items refuse.
revoke_share_link
Destructive write
Revoke a previously created share link by its token. The link stops working immediately (the public URL 404s). Requires edit access to the dashboard or skill, or ownership for a chat link.
list_share_links
Read-only
List the active (non-revoked) anonymous share links for a dashboard, chat, or skill (pass exactly one of dashboardId/chatId/skillId) — token, who created it, and when. Use the token to build the public URL ({origin}/s/{token}) or to revoke_share_link. Requires edit access to the dashboard or skill, or ownership for a chat.
request_dashboard_access
Additive write · Idempotent
Record a request for edit access to a dashboard you can currently only view. Notifies the dashboard owner and workspace admins (in-app, and by email per their settings) and lists the request on the Sharing tab of that dashboard; it does not grant access by itself. Idempotent — requesting again updates the same record. Requires workspace membership.
request_skill_access
Additive write · Idempotent
Record a request for edit access to a workspace skill you can currently only read — a viewer grantee, a guest, or a full member on a skill whose workspace default is viewer. Refuses anyone who can already edit (owner, editor grantee, or the editor default). Notifies the skill’s owner and the workspace admins (in-app, and by email per their settings) and lists the request on that skill’s Sharing pane; it does not grant access by itself. Whoever resolves it grants with set_skill_access (role ‘editor’, which also clears the request) or from that Sharing pane. Idempotent — requesting again updates the same record.
transfer_ownership
Destructive write
Hand a dashboard or a skill to another workspace member — the ONLY way an owner role moves after creation. Pass type (‘dashboard’ | ‘skill’), the object’s id, and toUserId (a uid from list_workspace_members). A dashboard has exactly one owner: the new owner is granted owner and the PREVIOUS owner is demoted to editor in the same write — never dropped, so nobody loses access by handing something over. A skill’s owner is ownerId: the transfer moves it, and with it the owner rung — the new owner always edits and is the one (besides an admin) who may delete; who ELSE edits is the skill’s grants + workspace default, untouched by the transfer. createdBy is immutable history on both and is never rewritten — after a transfer the author and the owner are different people, deliberately. Who may call it: the object’s CURRENT owner, or a workspace admin. Who may receive it: a full workspace member on a builder seat — a guest (share-by-email, explicit grants only) or a viewer seat cannot own, and transferring to the current owner is refused as a no-op. A DASHBOARD additionally moves only to a NAMED COLLABORATOR — someone already holding an explicit grant on it (any role); share it with them first, then transfer. Ownership is also what the refresh-schedule funding chain falls back to, so transferring a dashboard moves that fallback to the new owner on the next scheduled run. Returns the updated object.