The CoWork curation object cannot partition a managed engagement. Agent OWNERSHIP can.
The question
In a shared-services / managed engagement, can the Snowflake Intelligence Object curation model express phData-managed vs client-managed agent visibility (who controls which agents appear in the client's CoWork)?
Open follow-up #5 from [[2026-07-08-cortex-agent-cowork-skill-native-publish]], auto-promoted 2026-07-22. It is a mechanism question: is there a grant, ownership, or metadata primitive that distinguishes a partner-managed agent from a client-managed one inside the client's own CoWork agent list?
What we already know (from the vault)
- The curation primitive is a single account-level container holding a curated list of agents; admins with modify rights add or remove agents to control which appear to users. No per-user, per-role or per-group scoping of that list is described anywhere in the vault ([[2026-07-08-cortex-agent-cowork-skill-native-publish]]).
- The product is now branded Snowflake CoWork; the SQL object and DDL keyword are still literally
SNOWFLAKE INTELLIGENCE. Use "CoWork" in prose, the literal keyword in anything executable, and never write bare "Cowork" — Anthropic's Claude Cowork is a different product ([[2026-09-15-snowflake-intelligence-vs-cowork-naming-standard]]). - A real "required / cannot be removed" enforcement primitive does exist for per-group plugin assignment — but it belongs to Claude Cowork, not Snowflake CoWork. Conflating the two is the single most likely error in a client conversation ([[2026-09-19-cowork-group-plugin-assignment-enforcement]]).
- The cross-tenant delivery path was resolved separately: agents packaged in a Snowflake Native App reach a consumer's CoWork and run under restricted caller's rights (GA 2026-08-07, per release note read via index, not direct fetch). The narrower direct agent-share path carries a "Preview Feature - Open" banner and cannot share agents that use procedures, skills or MCP connectors ([[2026-09-23-cortex-agent-cross-tenant-marketplace-publish]]).
- Analogous "governed rollout" claims have failed before on exactly this distinction: a Snowflake connection profile gives a consistent baseline (distribution), not enforcement. Enforcement came only from ordinary RBAC layered on top ([[2026-09-14-brigade-snowflake-connection-profile-governed-rollout]]).
What the web says
Primary sources, fetched 2026-09-24 from docs.snowflake.com. All quotes are from those pages.
- The CoWork object is singular and account-scoped. It is "an account-level object used to manage all agents in Snowflake CoWork," and "You can only have one Snowflake CoWork object in your account." Default name
SNOWFLAKE_INTELLIGENCE_OBJECT_DEFAULT; created viaCREATE SNOWFLAKE INTELLIGENCE ...(deploy-agents). One account, one shelf. There is no second shelf to hand a partner. - Only three privileges are documented on that object. USAGE "allows users to view the list of agents added to the Snowflake CoWork object and see configuration values"; MODIFY "allows users to add or remove agents ... and change configuration values"; CREATE SNOWFLAKE INTELLIGENCE (account-level) allows creating the object. MODIFY is undifferentiated — it is add/remove rights over the whole list, not over the agents a given role owns (same page).
- Docs inconsistency worth knowing before you write a runbook. The same page states elsewhere that to add an agent "users must have the ALTER privilege on the Snowflake CoWork object and USAGE privileges on the agent," while the privilege table names MODIFY. Treat MODIFY as canonical and verify in the client account; do not put either name in a SOW unverified.
- Agent objects have a full, conventional RBAC model — and this is where the real answer lives. An agent is a schema-level object. Privileges: CREATE AGENT on the schema ("Required to create an agent"), USAGE on the agent ("Required to query the agent to generate responses"), MODIFY ("Required to update the agent"), MONITOR ("Required to view the agent's threads, logs, and traces"), and OWNERSHIP, "Automatically granted to the role that creates the agent. Can be transferred to another role with GRANT OWNERSHIP" (cortex-agents-setup). No preview banner on this page.
- Agents execute under caller's rights. "The agent runs with the querying user's default role," and that role also needs privileges on the objects the agent's tools touch (same page). In a managed engagement this means a phData-authored agent still runs inside the client's own data-access envelope — a governance point in phData's favor, and one worth saying out loud in a security review.
- There is no managed-by, publisher, vendor or author attribute on an agent. Across the deploy-agents, cortex-agents-manage and cortex-agents-setup pages, the only provenance-carrying fields are free-text
COMMENTand thePROFILEJSON'sdisplay_name. Nothing enforces them (cortex-agents-manage). - None of the three pages mentions partner, managed-service, shared-services, cross-account or share-sourced agents at all. The curation model was not designed with a two-party engagement in mind. That absence is the finding, not a gap in the search.
Convergences and contradictions
- Vault and primary docs converge, and the primary source is harsher. The vault suspected the curated list was account-level and unsegmented; the docs confirm it is structurally singular — one object per account, by rule. So the negative is not "undocumented," it is "architecturally precluded at the object level."
- The vault's Native-App finding and the docs' silence are compatible, not contradictory. The docs pages on curation simply do not cover cross-tenant provenance; the Native App path establishes a provider/consumer boundary at the packaging layer, upstream of curation. A Native App agent is phData-managed because the client cannot open the app's contents, not because CoWork labels it.
- One correction to carry forward. Prior vault status claims about the CoWork bundle being "GA at Summit" were overstated and already corrected in [[2026-09-14-snowflake-cowork-cortex-ga-vs-preview-matrix]]. Nothing in this brief revives them. The curation object itself carries no GA-or-preview label on any page fetched — it predates the rename and is treated as core plumbing, but that status is inferred, not stated.
Synthesis for RDCO
The answer is no at the layer the question names, and yes one layer down. The Snowflake Intelligence Object cannot express phData-managed vs client-managed visibility. It is a single account-level container with one undifferentiated MODIFY privilege governing the entire list. Whoever holds MODIFY can add or remove any agent, including the other party's. There is no scoping of MODIFY to a subset of agents, no per-role or per-group view of the curated list documented anywhere, and no provenance attribute on an agent object beyond free-text comment and display name. If a managed-services design depends on "phData curates its shelf, the client curates theirs," that design does not exist in the product as of 2026-09-24.
What does exist, and is documented, unlabeled-preview (i.e. treat as GA but verify), is the ordinary agent-object RBAC split: OWNERSHIP + MODIFY held by a phData-controlled role, USAGE (and optionally MONITOR) granted to client roles. That expresses the substantive half of the distinction — the client can run a phData-managed agent and read its traces but cannot alter it, and the reverse holds for client-built agents phData is not on the hook for. Pair it with separate databases or schemas per owner and a managed-access schema so grant issuance centralizes on the schema owner rather than leaking to individual agent owners. Caller's-rights execution means the phData agent still runs inside the client's data-access envelope, which is the right answer in a security review and should be led with rather than discovered.
The residual risk is entirely concentrated in MODIFY on the single CoWork object, and that is the thing to write into the SOW. Because it is all-or-nothing, one of three shapes has to be chosen explicitly and named in the engagement: (a) client retains MODIFY, phData requests list changes through a change ticket — slowest, cleanest accountability; (b) phData holds MODIFY during the managed term with a contractual no-touch on client-owned agents — fastest, and the guardrail is contractual, not technical, which must be stated plainly rather than implied; (c) a joint operations role both parties assume, with ALTER SNOWFLAKE INTELLIGENCE statements pushed through version control so the audit trail lives in Git rather than in Snowflake grants. Option (c) is the one that survives a client security review and the one worth defaulting to, but it requires phData to own the deployment pipeline, not just the agents.
For a harder boundary — a client who wants technical, not contractual, assurance that phData's agents are untouchable and phData cannot touch theirs — the mechanism is the Native App packaging path, not curation. That moves the boundary from a grant to an application container: the client installs, the agent surfaces in their CoWork, the contents are opaque. The costs are real and should be priced: the Marketplace listing and security-review gate, the loss of ad-hoc iteration during delivery, and the documented restriction that the direct-share variant cannot carry procedures, skills or MCP connectors. That trade — governance rigidity bought with delivery agility — is a genuine architecture decision to put in front of a client rather than a detail to resolve in build.
Finally, one guard. The "Required / cannot be uninstalled" per-group enforcement that makes this problem look solved is a Claude Cowork feature. Snowflake CoWork has no equivalent. Anyone who has seen both surfaces in the same week is one sentence away from promising a client a lock that does not exist.
Why this is in the vault
It settles the RBAC and ownership section of any phData shared-services / managed-CoWork statement of work: specifically, who holds MODIFY on the client's single SNOWFLAKE INTELLIGENCE object for the managed term, and whether the phData-vs-client agent boundary is sold as a technical control (Native App packaging) or a contractual one (agent OWNERSHIP split plus a no-touch clause). It also pre-empts the Claude-Cowork-enforcement mix-up in a client security review.
Open follow-ups
- Does the CoWork agent list render per-user — i.e. does a user with USAGE on the CoWork object but without USAGE on a given agent still see that agent listed? Docs are silent. This is testable in a sandbox account in under an hour and changes whether "hide phData's internal agents from business users" is achievable at all.
- Can Snowflake object tags be applied to an AGENT object? If yes, a governed
MANAGED_BYtag plus a tag-based policy would be a far better provenance expression than a naming convention. Not mentioned on any page fetched. - Is the MODIFY-vs-ALTER naming inconsistency on the deploy-agents page a docs bug or two genuinely distinct privileges? Verify with
SHOW GRANTS ON SNOWFLAKE INTELLIGENCEin a live account before either name enters a runbook. - Is there any audit surface for changes to the CoWork object's curated list (ACCOUNT_USAGE view, access history, query history on
ALTER SNOWFLAKE INTELLIGENCE)? Option (b) above is unsellable without one. - Does a skills-bearing, app-created agent survive Marketplace functional review? Carried forward unresolved from [[2026-09-23-cortex-agent-cross-tenant-marketplace-publish]]; it gates whether the Native App hard-boundary option is real for phData accelerators specifically.
Related
- [[2026-07-08-cortex-agent-cowork-skill-native-publish]]
- [[2026-09-23-cortex-agent-cross-tenant-marketplace-publish]]
- [[2026-09-19-cowork-group-plugin-assignment-enforcement]]
- [[2026-09-15-snowflake-intelligence-vs-cowork-naming-standard]]
- [[2026-09-14-snowflake-cowork-cortex-ga-vs-preview-matrix]]
- [[2026-09-14-brigade-snowflake-connection-profile-governed-rollout]]
- [[2026-09-07-snowflake-professional-services-vs-si-cortex]]
- [[2026-05-20-phdata-cortex-agents-practice]]
Sources
Primary (docs.snowflake.com, fetched 2026-09-24) — strong evidence:
- https://docs.snowflake.com/en/user-guide/snowflake-cortex/snowflake-cowork/deploy-agents — CoWork object definition, one-per-account rule, USAGE/MODIFY/CREATE privileges, ADD/DROP AGENT syntax
- https://docs.snowflake.com/en/user-guide/snowflake-cortex/cortex-agents-setup — full agent privilege model (CREATE AGENT, USAGE, MODIFY, MONITOR, OWNERSHIP), caller's-rights execution
- https://docs.snowflake.com/en/user-guide/snowflake-cortex/cortex-agents-manage — agent object type, CREATE AGENT / PROFILE / COMMENT syntax; confirms absence of provenance metadata
Secondary (vault briefs citing primary sources) — medium evidence; Native App GA date rests on a release note read via index rather than direct fetch:
- [[2026-07-08-cortex-agent-cowork-skill-native-publish]]
- [[2026-09-23-cortex-agent-cross-tenant-marketplace-publish]]
- [[2026-09-19-cowork-group-plugin-assignment-enforcement]]
- [[2026-09-15-snowflake-intelligence-vs-cowork-naming-standard]]
- [[2026-09-14-snowflake-cowork-cortex-ga-vs-preview-matrix]]
- [[2026-09-14-brigade-snowflake-connection-profile-governed-rollout]]
- [[2026-09-07-snowflake-professional-services-vs-si-cortex]]
- [[2026-05-20-phdata-cortex-agents-practice]]
Not consulted / flagged: no analyst blogs or secondhand summaries were used. No source was paywalled or blocked. Nothing here was verified against a live Snowflake account — every "verify in the client account" note above is an untested docs reading.