Skip to main content
SuperVaults Strategy Canvas — three-column canvas with Redemption Strategy, Vault Asset Pool center node, and Deposit Strategy columns The Strategy Canvas is where curators build rule-based automation for vault operations. Strategies evaluate indicator values on configurable tick intervals and dispatch DeFiX intents to the OMS when conditions are met. Navigate to /strategy/{chainId}/{vaultAddress} or select a vault from the dropdown.

Canvas Layout

Strategies are partitioned into three columns by action type:
ColumnActionDescription
InflowDEPOSITDeploy capital into yield sources
OutflowWITHDRAWALUnwind positions to fulfill redemptions
RebalanceREBALANCERedistribute capital between yield sources
Each strategy card displays its name, state, tick interval, and last intent result.

Strategy States

StateDescription
CREATEDDefined but never activated
IDLEReady, not ticking
RUNNINGActively evaluating rules each tick
PAUSEDHalted by vault kill switch
ERRORRuntime error (hover for details)
ARCHIVEDSoft-deleted
Toggle between IDLE and RUNNING using the state control on each card.

Kill Switch

The vault-level kill switch (top of canvas) pauses all strategies simultaneously. When engaged, all RUNNING strategies transition to PAUSED. Use this for emergency stops without toggling individual strategies. API: PATCH /api/v1/vaults/{vault_id} with { "kill_switch": true }

Creating a Strategy

Click New Strategy to open the creation form.

Core Fields

FieldDescription
NameHuman-readable identifier
ActionDEPOSIT, WITHDRAWAL, or REBALANCE
Tick IntervalEvaluation frequency in milliseconds
CooldownMinimum time between intent dispatches (milliseconds)
PriorityExecution order within column (lower = higher priority)

Indicators

Named variables evaluated each tick. Define with a name (e.g., usdc_morpho_apy) and a data source expression. Live values are visible by hovering over a running strategy’s shard state.

Rule Tree

Boolean logic tree that determines when the strategy dispatches an intent:
Node TypeDescription
EXPRindicator op value (e.g., apy > 0.05)
ANDAll children must be true
ORAt least one child must be true
NOTNegates a child rule
VOTEN-of-M children must be true

Action Config

FieldDescription
size_exprPosition size expression (e.g., free_assets * 0.5)
objectiveOptimization goal
execution_nameTarget hook name
target_addressYield source address
max_slippage_bpsMaximum acceptable slippage in basis points

Conviction Config

Controls how many consecutive passing ticks are required before dispatching an intent. Prevents excessive churn on noisy signals.

Viewing Intents

Each strategy card has an Intents tab showing its dispatch history: intent ID, action, status (Processing/Completed/Failed/Cancelled), size, slippage, gas used, and timestamps. Vault-level intent history is also available across all strategies.

Live Shard State

Running strategies maintain in-memory shards with current indicator values, active intent count, and last tick timestamp. GET /api/v1/engine/shards/{vault_id}/state returns this state. A 404 means no shard exists (no running strategies).

Drag-to-Reorder

Drag strategy cards within a column to change priority order. When multiple strategies trigger simultaneously, higher-priority strategies dispatch first.

Optimistic Concurrency

Strategy updates require a version field. If two clients edit the same strategy, the second write returns 409 Conflict. Refresh and retry with the latest version.

API Reference

EndpointMethodDescription
/api/v1/strategies?vault_id={id}&limit=50GETList strategies
/api/v1/strategiesPOSTCreate strategy
/api/v1/strategies/{id}PUTUpdate (requires version)
/api/v1/strategies/{id}DELETEDelete strategy
/api/v1/strategies/{id}/statePATCHTransition state
/api/v1/strategies/{id}/reloadPOSTHot-reload running strategy
/api/v1/strategies/{id}/intents?limit=50GETStrategy intent history
/api/v1/vaults/{vault_id}GET/PATCHKill switch and rate limits
/api/v1/engine/statusGETActive shard count
/api/v1/engine/shards/{vault_id}/stateGETLive indicator values
vault_id in the Strategy Engine uses {chainId}:{vaultAddress} format (e.g., 8453:0xdef...). Erebor uses separate chain_id and vault_address parameters.