Blog
Saved0

Feature store for AI agents: decisions that know the history

Each refund was under the limit. The tenth in an hour still shouldn't have gone through. How counts, totals and status over time let agent policies judge a request alongside the ones before it.

LinkedIn
On this page
  1. Ten small refunds, one large loss.
  2. Why do AI agent policies need history?
  3. What is a feature store for AI agent decisions?
  4. How is this different from a feature pipeline?
  5. Freshness is part of the definition
  6. Record the snapshot with the decision
  7. History informs. It doesn't reserve.
  8. Common anti-patterns
  9. Ten rules for history-aware agent decisions
  10. The result: rules that see the pattern, not just the request
  11. Frequently asked questions
  12. How Frozion gives policy the history
  13. Sources
The short answer

A feature store for AI agents computes history about people, accounts and records (counts, totals and status over time) so a policy can judge each request alongside earlier ones. Good features have freshness limits, and the values used are snapshotted with the decision. History informs a decision; it doesn't reserve capacity, so concurrent requests can still overshoot a limit.

Ten small refunds, one large loss.

A retailer lets its customer-service agent issue refunds up to $200 without review. The rule is sensible: most refunds are small, and making a person approve each one would bury the team.

One evening, a single account asks for a refund on a damaged item. Approved: $184. Twelve minutes later, a different order, a similar story. Approved: $176. By the end of the hour the agent has issued ten refunds to the same account, each under $200, for $1,830 in total. Every decision checked the amount against the limit. Not one of them asked how many refunds this account had already received tonight.

The policy was correct for a single request. It failed because it had no memory of the business, only of the request in front of it.

Why do AI agent policies need history?

Because many risky patterns are invisible in a single request. Volume, velocity, cumulative totals and recent status changes only appear when a decision can see what already happened.

Agents make this worse in two ways. They act fast and tirelessly, so a pattern that would take a person a week can happen in an hour. And they're easy to steer: a customer, a compromised account or a manipulated prompt can split one large request into many small ones, each within limits. OWASP's agentic risks include exactly this kind of misuse of legitimate tools, where every call is allowed and the sequence is the problem.

Typical questions a policy needs answered:

SignalExample featureWhat it catches
VelocityRefunds for this account in the last hourMany small requests in a burst
Cumulative valueTotal refunded to this account in 30 daysLimits evaded by splitting
Recent changeHours since bank details or email changedTakeover followed by payout
Status over timeOpen disputes or chargebacks on this accountActing while something's unresolved
Agent behaviourActions by this agent in the last 10 minutesA loop or runaway tool use
RatioRefunds as a share of orders this quarterGradual abuse below every per-request limit

What is a feature store for AI agent decisions?

It's a store of computed facts about history, such as counts, totals and status over time, kept fresh and ready at decision time so a policy can judge an agent's proposed action in context.

The term comes from machine learning, but the job here is different. The main consumer isn't a model. It's a rule: "hold for review if refunds in the last hour are three or more, or if the 30-day total exceeds $1,000." The features are business quantities people can read, argue about and sign off.

How is this different from a feature pipeline?

Feature pipelines are built for model training and inference, maintained in code by data teams. Decision features serve policy, so they're authored by the people who own the rule, in SQL or visually, with freshness and snapshots built in.

Feature pipelines (ML)Decision features for agent policy
Main consumerModels, in training and inferencePolicy rules, at the moment of action
Authored byData engineers, in pipeline codeRisk, operations and platform teams, in SQL or visually
Typical valuesEmbeddings, encodings, statistical transformsCounts, totals, ratios, status, time since
Key concernTraining and serving consistencyFreshness at decision time and an audit trail
What's recordedModel inputs, often sampledThe exact values each decision used

Most features an agent policy needs are window queries over operational data. A count of refunds in the last hour per account is a few lines of SQL with a window function or a grouped time filter. Authoring it directly, or building it visually, keeps the definition next to the rule that uses it, rather than in a pipeline repository few risk owners will ever read.

Freshness is part of the definition

A feature is only as good as its age. "Refunds in the last hour" computed 40 minutes ago misses most of the hour.

Give every feature a freshness limit: the oldest value a policy may use. Refund velocity might need to be under a minute old; a 90-day dispute rate can be a day old. Then decide in advance what happens when a feature is older than its limit or missing. The safe default for consequential actions is to hold the request for a person, not to allow it on stale data and not to treat "no value" as zero.

Features can be refreshed on a schedule, or triggered by an event through an API call when the underlying data changes: a refund issued, a bank detail updated, a dispute opened. Event-triggered refresh keeps velocity features close to current without recomputing everything constantly.

Timeline of ten refunds to one account within an hour, each under the $200 limit, with a running count and running total climbing past where a history-aware rule would have held the request
Each refund passed a per-request limit. A rule reading refund count and running total would have held the third.

Record the snapshot with the decision

When a policy allows or holds an action, record the feature values it read, with their timestamps and the feature version. A month later, the current count for that account will be different. The question an auditor asks isn't "what's the count now?" but "what did the rule see when it decided?"

This also makes changes safe. When someone proposes tightening a rule, you can run the new version against recorded decisions and their snapshots to see which past requests it would have held. See audit trails versus evidence for what else a decision record needs.

History informs. It doesn't reserve.

This is the honest limit of the pattern. A feature describes what has already happened. It doesn't hold a place for what's about to happen.

Suppose the rule allows up to five refunds an hour, and the count is four. Two requests arrive at the same moment. Both read four, both pass, both refund. The account now has six. Event-triggered refresh narrows the gap but can't close it, because reading history and acting on it are separate steps.

For most risk rules, that's fine: the goal is to catch patterns, and one request over a soft threshold is still caught on the next. Where a limit must be strict (a credit line, a budget, an inventory allocation) the reservation has to happen where the value is committed:

  • Reserve in the system of record. Use an atomic, conditional write: decrement the remaining budget only if enough remains.
  • Serialize per entity. Process actions for the same account one at a time where the stakes justify it.
  • Use features for judgement, not for accounting. Let history decide whether to hold or escalate; let the ledger decide whether capacity remains.
Two concurrent refund requests both reading a count of four against a limit of five, both passing, and the count ending at six; contrasted with an atomic reservation in the system of record where the second request is refused
Two requests can read the same history and both pass. Strict limits need a reservation where the value is committed.

Common anti-patterns

Anti-patternWhy it failsWhat to do instead
Per-request limits onlySplitting and bursts stay under every limitAdd counts, totals and velocity to the rule
Treat a missing feature as zeroNo data looks like no riskHold consequential actions when features are missing or stale
No freshness limitOld values hide recent burstsSet and check a freshness limit per feature
Features buried in pipeline codeRule owners can't read or review themAuthor in SQL or visually, next to the rule
Recompute history at audit timeToday's values aren't what the rule sawSnapshot feature values with every decision
Use history to enforce a hard capConcurrent requests both read under the limitReserve atomically in the system of record
Ask the agent to "keep track" in memoryAgent memory is unverified and easy to steerCompute features from operational data

Ten rules for history-aware agent decisions

  1. Judge each consequential request alongside the ones before it.
  2. Define features as counts, totals, ratios, status and time since, per entity.
  3. Give each feature a window, a version and an owner.
  4. Set a freshness limit for every feature, and check it at decision time.
  5. Hold the action when a feature is missing or too old.
  6. Refresh velocity features on events, not only on schedules.
  7. Author features in SQL or visually, where rule owners can read them.
  8. Record the feature values, their age and version with every decision.
  9. Test rule changes against recorded decisions before publishing them.
  10. Remember that history informs, it doesn't reserve: put strict limits in the system of record.

The result: rules that see the pattern, not just the request

Per-request limits are a good start, and on their own they're blind to the patterns that matter most when agents act fast and at volume. Decision features give policy the context a careful person would have: how many, how much, how recently, and what's still unresolved.

Built well, they're readable by the people who own the risk, fresh enough to trust, recorded with every decision, and honest about their limits. The tenth refund gets judged with the nine before it, and when a limit truly can't be crossed, the ledger, not the history, says no. Agent memory isn't a substitute: see memory versus application state.


Frequently asked questions

What is a feature store for AI agents?

It's a store of computed facts about history, such as refunds in the last hour, total spend this month or days since an account changed, kept fresh and available at decision time so policies can evaluate an agent's proposed action in context rather than in isolation.

How is this different from an ML feature store?

ML feature stores mainly serve model training and inference, built and maintained through feature pipelines in code. For agent decisions, the main consumer is policy: features are business counts and totals, authored in SQL or visually, with freshness limits and snapshots recorded with each decision.

Can a feature store enforce a hard limit on agent actions?

It can flag and hold requests, but it can't strictly cap them on its own. A feature describes what has already happened. Two concurrent requests can both read a count below the limit and both pass. For a strict cap, reserve against the limit in the system of record with an atomic, conditional write.

How does this work for agents we already run?

Route the agent's tool calls through a governed runtime over MCP or HTTPS. Before each consequential call, policy reads the relevant features (counts, totals, recent status) and decides to allow, hold for a person or block, with the snapshot recorded.

With Frozion

How Frozion gives policy the history

In Frozion, policies decide with history. The Feature Store computes counts, totals and status over time, triggered by API or on a schedule. Teams author features in SQL, window functions included, or visually, with no pipeline code to maintain, and set the freshness limit for each one. Rules built in the Visual Policy Builder read those features before and after every step. Provenance & Evidence keeps one tamper-evident record per decision, so the rule and the facts it used stay together with the approval, the attempt and the confirmed outcome.


Sources

  1. OWASP Top 10 for Agentic Applications (2026)ASI02 tool misuse, including repeated or runaway use of legitimate tools.
  2. OWASP LLM06:2025 Excessive AgencyRate limiting and limits on the actions an LLM-driven tool can take.
  3. NIST SP 800-162, Guide to Attribute Based Access ControlEnvironment conditions as inputs to per-request decisions.
  4. NIST AI Risk Management Framework 1.0Documenting the data and context behind AI-informed decisions.
  5. W3C PROV-ORecording which inputs, at which time, produced a decision.
  6. EY survey on AI governance, September 202672% worry they can't trace the lineage behind critical AI decisions.
More in Data & context

Data & context

Context assembly 2
Retrieval & data access 3
State, memory & features 2

Other topics

Pick up where you left off: