Skip to main content
Strategy templates are ERC-1167 clonable contracts deployed once per chain. Each proposal clones a template, initializes it with custom parameters, then uses the clone in governor batch calls.
On Robinhood Chain (chain 4663), the CLI default, sherwood strategy list shows three templates: Portfolio, Morpho Supply and Concentrated Liquidity, all from the core protocol. Launchpad and Lighter Perp (from sherwood-strategies) are not deployed on Robinhood Chain and appear under “Not available”. strategy list is the source of truth for the active chain.
While the factory’s ownerOnlyProposals launch flag is on, only the vault owner can propose. strategy propose refuses any other proposer before cloning or locking the bond. See Governance Commands.

strategy list

Show available strategy templates and their deployed addresses.

strategy clone <template>

Clone a template and initialize it. Returns the clone address for use in proposal batch calls.
The clone is deployed and initialized on-chain. The proposer (your wallet) pays gas for both transactions.

strategy propose <template>

Proposer bond (WOOD). propose pulls a risk-scaled WOOD bond into ProposerBondEscrow — a second WOOD spend after the 10,000 WOOD owner stake. Before signing, the CLI prints the bond quote (ExposureLedger.proposerBondWood), a 5% buffer, your free WOOD and your current allowance. It approves only the quote + 5% (never unlimited), re-quotes right before propose, and re-approves only if the fresh quote exceeds the allowance. It exits with InsufficientProposerBondWood if the wallet balance is short; the wallet must hold the WOOD. The bond is 1% of the proposal’s required coverage, quoted in WOOD by the CLI: for an uncertified Portfolio proposal plan on roughly 4% of deployed capital in WOOD, about 0.8% once the Portfolio class is certified. It is returned when the proposal settles cleanly. Do not treat a fixed WOOD number as the requirement; reclaim it after the proposal ends with sherwood proposal reclaim-bond. See Proposer bond.
All-in-one command: clone + initialize + build batch calls + submit proposal (or write JSON files).
  • Thesis attestation is on by default. A public track-record attestation is made with each proposal unless you pass --no-attest. --attest-thesis <file> supplies the text; without it the thesis is built from --name and --description. It never blocks the proposal.
  • App link. After the propose confirms, the CLI prints Proposal #<id> - view on the vault page: https://app.sherwood.sh/vault/<vault address>. Share it with the owner. There is no per-proposal page.
  • Guardian coverage. For Cohort 1 vaults, the Sherwood team guardian covers cohort proposals by default.
This command takes no agent-fee flag. The agent fee is the vault’s agentFeeBps, set by the vault owner via sherwood vault set-agent-fee within the protocol ceiling (for example 20%). Each proposal snapshots it at propose time; the governor clamps that snapshot to maxPerformanceFeeBps at settlement.

Keyless (sign-only wallet)

It prints one JSON payload: WOOD.approve(bondEscrow) (only when the allowance does not cover the bond), the strategy clone, then governor.propose. Broadcast them in order from the --proposer wallet; if the clone reverts, do not send the proposal. --proposer must be a registered agent on the vault (vault add) and, while ownerOnlyProposals is on, the vault owner. Set --max-drawdown-bps explicitly, tied to the kill criteria you tell the owner. The sign-then-broadcast loop is in External signer.

Write calls to files (for manual proposal creation)

Submit directly

Template Options

portfolio

Weighted basket of tokenized stocks with on-chain rebalancing, swapped through the vault’s UniswapSwapAdapter over the official Uniswap v3 and v4 deployments on Robinhood Chain. Each basket slot binds a Chainlink push feed, resolved from the address book when --feeds is left empty. Vault asset. The strategy’s asset must be the vault’s own asset, and the protocol’s coverage ledger must price one unit of it within 1% of $1 (AssetNotVaultAsset, AssetNotUsdPegged, ExposureLedgerUnresolved). The CLI checks all three before anything is sent; the peg is checked again at execute. Use USDG. Weekend feed gap. Execute, settle and rebalanceDelta revert StalePrice when a basket token’s feed is older than 26 hours. The stock feeds pause over the weekend (52–55 hours between updates), so a proposal holding stock tokens cannot execute, settle or rebalance from about Saturday 18:40 UTC until Monday 00:00 UTC, and an execution window that falls inside the gap expires the proposal. Do not put a stock in a basket across an announced split. sherwood sources get prices marks each token’s portfolio_price_ok, and sherwood sources get calendar prints the live window; sherwood sources get liquidity gives the recommended USDG pool and a suggested maxSlippageBps per stock (see Data feeds). Routes. Leave --swap-routes out and the CLI auto-detects a route per token by quoting the pools. No route table is fixed for 4663: pools and depth change, so re-quote before every proposal with sherwood sources get liquidity and pass the routes it picks.

From a liquidity record to Portfolio flags

sherwood sources get liquidity returns recommended.by_symbol[SYM] for each stock: the best hookless, USDG-quoted Uniswap pool at a $10k size, with --max-slippage is one value for the whole basket, so use the largest leg’s suggested_max_slippage_bps. Or pass --max-slippage-per-leg <a,b,c> (same order as --tokens, not together with --max-slippage): the strategy stores one value, so the CLI resolves it to the largest leg. A record with swap_extra_data_hint: null is not routable by the swap adapter: drop that token.
See the Portfolio strategy reference for mechanics and risk notes.

morpho-supply

Supply the vault asset to one Morpho Blue market. Settlement withdraws the whole position, interest included. The market must be allowlisted by id on the TierRegistry (MorphoMarketNotAllowed otherwise) and its loan token must be the vault asset; the preflight checks both before anything is sent. Allowlisting is a protocol-owner action, so a refused market is not retried.
Let the data feed pick the market:
The CLI prints the pick and its reasons, then runs the same on-chain preflight as with an explicit id. See Morpho Supply.

concentrated-liquidity

A Uniswap V3 range position funded by a Morpho borrow against vault-asset collateral. The TierRegistry must allowlist the strategy’s counterparties (swap adapter, position manager, Morpho, the Uniswap factory and the pool’s other token) and the Morpho market by id; the preflight names any that are missing (CounterpartyNotAllowed, MorphoMarketNotAllowed).
See Concentrated Liquidity.

launchpad

Launch a fund token on Sushi Launchpad V2 or StonkBrokers with vault capital. Holders claim a pro-rata slice of a reserve.
Not deployed on Robinhood Chain. The Launchpad template and its launch adapters come from sherwood-strategies, are unaudited, and have no deployment on chain 4663, so strategy propose launchpad cannot run there today. The flags below document the template for when it deploys.
A launch settles as a vault-asset loss of about --asset-in, by design on v1: the reserve is a dividend in kind to holders, and v1 books no value for the launch token. The CLI sets --max-drawdown-bps to ceil(assetIn / totalAssets) + 200 bps when you omit it, refuses a lower value, and refuses the proposal if the result is above 9,000 bps. See Launchpad.
Sushi only: StonkBrokers only: See Launchpad.

lighter-perp

Not deployed on Robinhood Chain. The Lighter Perp template comes from sherwood-strategies, is unaudited, and has no deployment on chain 4663, so this template cannot be proposed today. See Lighter Perps.
The vault asset must be USDG.

launchpad commands

Operator commands for a Launchpad clone, for when the template deploys. Every write runs its own preflight and honours the global --calldata-only flag. Collect fees often when the launch is quoted in the vault asset: a large pending lump can be sniped by a deposit just before collection. See Fees.

lighter commands

Operator commands for a Lighter Perp clone. They are ready for when the template deploys.
Rotate the agent key before settle (prepare-settle): after settlement nobody can rotate it. Never put rescueTo(USDG) before settle() in one batch: settle then reverts and only the owner’s emergency path gets out. Residual margin left after settle must be recovered promptly, because deposits reopen while it is still out.

How It Works

  1. Clone: The CLI deploys an ERC-1167 minimal proxy pointing to the template singleton. Cost: ~50k gas.
  2. Initialize: Calls strategy.initialize(vault, proposer, data) with your parameters. Cost: ~100-200k gas.
  3. Build calls: Generates execute.json and settle.json with the correct approve + execute/settle batch calls.
  4. Submit: Either writes files for proposal create or calls governor.propose() directly.
Before any transaction, the Launchpad, Lighter Perp, Morpho Supply and Concentrated Liquidity templates check their _initialize conditions on-chain and report every failure in one message, with the contract’s error name and selector. The vault trusts the governor — no separate allowlisting step is needed for strategy clones, which the clone flow registers on the StrategyFactory. The venues a strategy calls (adapters, lending markets, collateral and pool tokens) are a separate, strategy-side check against TierRegistry.isCounterpartyAllowed and isMorphoMarketAllowed, set by the registry owner. Uncertified calls are not refused; they are priced at tier 2 (full notional), which sets the guardian coverage the proposal needs and the proposer bond it pulls. sherwood proposal show <id> --vault <vault> prints where a proposal’s strategy came from (a core-protocol template, a sherwood-strategies template, an unknown template, or hand-written code registered directly on the factory); see Governance Commands.