Anyone can build a bot that trades. The hard part is a bot you'd leave alone. The leash is a set of constraints checked by the runtime at signing time, outside the errand's code. If a check fails, the transaction is never signed.
Maximum value moved per run and per day, in USD terms at execution. Above it, the runtime refuses to sign. There is no override flag.
cap_per_run: $25 cap_per_day: $100
An explicit list. Any transaction touching an asset outside it is refused, including intermediate swap legs.
assets: [TSLAx, USDC]
Optional window in a timezone. Outside it the skee does not wake at all; a triggered wake is deferred to the window.
hours: 09:30–16:00 tz: America/New_York
One signature from the owner stops all runs, cancels open orders and freezes the skee. Resuming needs a second signature. The skee cannot un-kill itself.
skee kill <id>
Max slippage per trade, and an optional "do nothing if the price moved more than X% since last run".
max_slippage: 0.5% skip_if_moved: 3%
Not a limit, but part of the leash: every run writes what it saw, decided and did. No receipt, no next run.
receipt: required
A skee's keys never live in the errand. The errand produces an intent: "swap 25 USDC for TSLAx, max slippage 0.5%". The runtime simulates the intent, computes its USD value and touched assets, checks every leash rule, and only then signs.
The check happens on the simulated result, not on what the errand claims. An errand that says "$25" but would move $250 is refused on the simulation.
A leash bounds how much a skee can lose per run and per day. It does not make an errand a good idea. A DCA into a falling asset will keep buying, inside its cap, until you kill it. That is the errand doing exactly what you asked.
The leash also cannot protect against a compromised owner key. If someone can sign as you, they can change the leash. Use a hardware key or a multisig as the owner.