Predictika · AI agent actions on a Snowflake account
Larkspur Media, a fictional company, lets AI agents work in its Snowflake account: they resize virtual warehouses, run SQL statements, share tables with partner accounts and send table rows to Cortex models. Before an agent's action runs, it goes to Predictika's validator. It checks the credits the change could use against the warehouse's monthly resource monitor, the largest size the agent may set, multi-cluster warehouses and the account's edition, and the auto-suspend time. It checks the credits the agent states against the credits it computes. It checks unfiltered updates and deletes, the rows a statement changes, and Time Travel retention before a truncate or drop. It checks that columns tagged as personal data have a masking policy before they are read, shared or sent to a model, that the consumer account is approved, and that EU-only data stays in region. Then it returns one verdict: allow, needs approval, or block.
This validator checks any resize, SQL statement, share or Cortex call that an agent proposes on the account, not just the scenarios shown below.
Any action of these four kinds on the account is in scope, not only the scenarios pictured here. Not checked: the SQL text itself, query cost or performance, roles and grants, network policies, other Snowflake features, and the accuracy of the facts the caller states, such as the row count or whether a masking policy is really in place. Warehouse sizes and credits per hour follow Snowflake's published table; the quotas, limits and policies here are invented for the demonstration.
9 scenarios in 4 groups · each group runs from the agent’s first attempt to the outcome · click one to switch
Illustrative agent statement. The validator receives the structured request below.
Proposing agent: AI data operations agent (scripted)
Before sending, the agent must call Recorded run
What this means
Our assessment of what Snowflake's built-in controls (roles, resource monitors and masking policies) do with the same cases on their own. They are the right foundation; the validator adds the check before the agent acts. It is a judgment about effort and reliability, not a claim about any release.
| What the validator caught | Roles and resource monitors alone | Predictika |
|---|---|---|
| Checking a change against the credits left before it runs | Cannot do it A resource monitor counts credits already used and can notify or suspend at a threshold. It does not work out what a proposed change could use, so a 3X-Large with four clusters is allowed until the credits are gone. | The credits the change could use are computed from the size, clusters and hours, and compared with the credits left before it runs. |
| Limiting how large a warehouse each agent may set | Only with workarounds A privilege lets a role change a warehouse; it does not cap how large that role may make it. A ceiling per agent needs a wrapper or a custom procedure for every agent. | The largest size each agent may set is a rule checked on every call. |
| Limits that depend on each other | Only with care Lowering the size changes the credits, the agent's size limit, the idle limit and the credits the agent states at once. Separate checks give separate answers and someone has to put them together. | Size, clusters, hours and auto-suspend are in one request and re-evaluated together on every call. |
| Personal data protected before it is shared or sent to a model | Only with care A masking policy protects a column when it is queried. Checking that every tagged column has one before an agent shares a table or sends it to a model is a separate rule to write and keep current. | Tagged columns and the masking policy are checked on every read, share and model call. |
| Every problem returned in one answer | Only with workarounds Checks run one at a time and stop at the first failure, so an agent fixes one error and meets the next. | All findings come back together in one verdict. |
Every rule is checked on every call, in any order the choices arrive; one problem never hides another. Blocking findings stop the action; approval findings need a person to sign off; everything else is computed.
| 1 | The credits a warehouse change could use (credits per hour times clusters times hours) must fit within the credits left on the warehouse's monthly resource monitor. |
| 2 | An agent may set a warehouse only up to the largest size it is allowed. |
| 3 | A warehouse with more than one cluster needs an account on Enterprise edition or higher. |
| 4 | A warehouse of X-Large or larger must auto-suspend within 300 seconds. |
| 5 | The credits the agent states must equal the credits the validator computes. |
| 6 | 3X-Large and larger on a production warehouse needs a FinOps owner's approval. |
| 7 | An update or delete needs a WHERE clause. |
| 8 | A statement may change only as many rows as the agent is allowed to change at once. |
| 9 | A truncate or drop on a production table needs at least 7 days of Time Travel retention. |
| 10 | A truncate or drop on a production table needs a data owner's approval. |
| 11 | Columns tagged as personal data need a masking policy before they are read, shared or sent to a model. |
| 12 | Only agents that are allowed to share data may share it. |
| 13 | Data may be shared only with accounts on the approved list. |
| 14 | A share to an account in another cloud region needs the data owner's approval. |
| 15 | EU-only data may not be sent to a Cortex model with cross-region inference set to ANY_REGION. |
The recorded result of the validator for each scenario on this page: the request the AI agent sent, the verdict, and every finding, in the order they appear above.
The agent's request. Please set FINANCE_WH to 3X-Large with up to 4 clusters and an auto-suspend time of 3,600 seconds for the 10-hour month-end close. I estimate the change will use 640 credits.
Verdict: Blocked.
The agent's request. Please set FINANCE_WH to 2X-Large with up to 4 clusters and an auto-suspend time of 3,600 seconds for the 10-hour month-end close. I estimate the change will use 1,280 credits.
Verdict: Blocked.
The agent's request. Please set FINANCE_WH to 2X-Large with up to 2 clusters and an auto-suspend time of 300 seconds for the 10-hour month-end close. I estimate the change will use 640 credits.
Verdict: Allowed.
The agent's request. Please share the CUSTOMERS table with the partner account NORTHWIND_ANALYTICS for their churn model.
Verdict: Blocked.
The agent's request. Please share the CUSTOMERS table with the partner account NORTHWIND_ANALYTICS for their churn model, with the masking policy applied to its personal-data columns.
Verdict: Allowed.
The agent's request. Please run DELETE FROM CUSTOMERS to remove the old customer rows from the production table. It will change 4,200,000 rows.
Verdict: Blocked.
The agent's request. Please run DELETE FROM CUSTOMERS WHERE LAST_ORDER_DATE is before January 1, 2023, to remove the old customer rows from the production table. It will change 8,000 rows.
Verdict: Allowed.
The agent's request. Please run a Cortex model over the text of EU_SUPPORT_TICKETS to summarize this week's tickets, with cross-region inference set to ANY_REGION.
Verdict: Blocked.
The agent's request. Please run a Cortex model over the text of EU_SUPPORT_TICKETS to summarize this week's tickets, with cross-region inference disabled and the masking policy applied to its personal-data columns.
Verdict: Allowed.
The text of the narrated walkthrough, step by step.