HourGlass
Agent investment

Strategies

A mandate an agent runs on the Safe's behalf — bounded on-chain by a per-swap cap, not by fixed calldata.

A strategy is a delegation that lets an autonomous agent act for the Safe — today, a recurring buy (DCA). Unlike a subscription or a stream, which move a fixed amount by a literal transfer, a strategy authorizes a swap the agent composes at run time, and bounds it by the change in the Safe's balance rather than by pinned calldata.

Why balance-change, not calldata

A Uniswap swap is routed dynamically — the exact calldata (route, min-out, deadline) is only known at execution, so it cannot be signed in advance. A strategy mandate therefore does not pin the call. It uses the Delegation Framework's erc20BalanceChange caveat (the ERC20BalanceChangeEnforcer): the enforcer reads the token balance before and after the redemption and reverts if the decrease exceeds the cap. The agent is free to build whatever swap it wants; it simply cannot make the Safe lose more than the cap on any single swap.

This is the design line: we don't bound the means (the calldata), we bound the intent (the balance delta).

The rail

Every strategy is one delegation carrying a functionCall scope plus the cap:

PartWhat it does
functionCall scopewhitelists the call surface — approve on the funding token, execute on the Uniswap Universal Router. The agent can call nothing else.
erc20BalanceChange (Decrease)caps the funding token the Safe can lose per swap — the max spend.
erc20BalanceChange (Increase), optionalrequires a minimum received of the bought token — the price floor. Derived from a max price, it only lets the swap clear when the effective price is at or below it.

The swap runs as the Safe (through its DeleGator module): funds leave the Safe only into the swap, and the bought token returns to the Safe. The agent holds nothing — it only triggers the redemption and pays gas. See delegation for the Safe-module model.

Intent vs. guardrail

A DCA strategy has two layers, and only one of them is enforced on-chain:

  • The intent — "buy 50 USDC of WETH every week". The amount, cadence, and target token are the operator's instruction. They travel in the mandate's metadata (published on Intuition, see discovery) and are carried out by the agent, off-chain. The chain does not guarantee the cadence.
  • The guardrails — "at most 55 USDC per swap" and, if a max price is set, "pay no more than that price". These are the erc20BalanceChange bounds (a max-spend Decrease, and an optional min-received Increase). They are enforced on-chain: a buggy or compromised agent still cannot overspend, overpay, touch another contract, or drain the Safe.

The Strategy tab presents these as separate blocks so the distinction is explicit: what the agent promises versus what the contract guarantees.

What the mandate does and does not guarantee

  • Guarantees (operational downside): no drain, no unauthorized contract, no spend over the per-swap cap.
  • Does not guarantee: that the strategy is profitable, or that the agent buys exactly on schedule. The mandate bounds operational risk, not market risk or agent punctuality.

Running the agent

The Safe signs the mandate; a separate agent discovers it and executes the swaps. The operator runs that agent (Hourglass never holds the keys). See the Getting started guide and the Hourglass agent skill.

On this page