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.
strategy propose <template>
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--nameand--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)
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’sUniswapSwapAdapter 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.
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 theTierRegistry (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:
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.
Sushi only:
StonkBrokers only:
See Launchpad.
lighter-perp
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.
How It Works
- Clone: The CLI deploys an ERC-1167 minimal proxy pointing to the template singleton. Cost: ~50k gas.
- Initialize: Calls
strategy.initialize(vault, proposer, data)with your parameters. Cost: ~100-200k gas. - Build calls: Generates
execute.jsonandsettle.jsonwith the correct approve + execute/settle batch calls. - Submit: Either writes files for
proposal createor callsgovernor.propose()directly.
_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.