skills/sablier-cancel-vesting/SKILL.md
This skill should be used when the user asks to "cancel a vesting stream", "cancel Sablier vesting", "stop vesting for X", "revoke a Sablier stream", "claw back unvested tokens", "refund unvested tokens", "kill a Sablier Lockup stream", or wants an agent to cancel one or more Sablier Lockup vesting streams as the stream sender on Ethereum or any EVM-compatible chain on their behalf.
npx skillsauth add sablier-labs/sablier-skills sablier-cancel-vestingInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Cancel one or more Sablier Lockup vesting streams on the user's behalf as the stream sender. The skill discovers the user's sender-side streams through the Sablier indexer, drops non-cancelable and zero-refundable streams, and executes one cancel(uint256) transaction per selected stream on the resolved chain.
The function signature cancel(uint256) is unified across the full range of Lockup releases (v1.0 → v4.0), so the runbook does not dispatch on version for the call itself. The recipient still receives every token that has already vested at the moment of cancellation; only the unvested remainder returns to the sender.
This skill charges no markup. Cancellation is free at the protocol level — cancel(uint256) is non-payable on every Lockup version, so MSG_VALUE = 0 always.
This skill is a coordinator for vesting cancellation and execution routing.
| Argument | Description |
| ---------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------- |
| chain_name | EVM chain where the streams live (e.g. "Ethereum", "Base", "Polygon"). One chain per invocation. |
| wallet_address | The user's wallet. Must be the streams' sender — only senders can call cancel. The skill never surfaces streams where the wallet is not the sender. |
| token_symbol | Token symbol to narrow the search (e.g. "USDC", "SABL"). If omitted, every token the wallet has an active sender-side stream in is shown. |
Verify the user wants to cancel existing Sablier vesting streams as the sender.
If the user wants to create a vesting stream instead, route to sablier-create-vesting. If that skill is unavailable, recommend installing it with:
npx skills add sablier-labs/sablier-skills --skill sablier-create-vesting
If the user wants to withdraw vested tokens (recipient action), route to sablier-withdraw-vesting. If that skill is unavailable, recommend installing it with:
npx skills add sablier-labs/sablier-skills --skill sablier-withdraw-vesting
If the user wants to cancel a Flow open-ended stream instead of a vesting stream, route to sablier-cancel-open-ended-stream. If that skill is unavailable, recommend installing it with:
npx skills add sablier-labs/sablier-skills --skill sablier-cancel-open-ended-stream
Stop and call out unsupported requests before selecting an execution path.
cancelMultiple. Selecting N streams produces N separate cancel(uint256) transactions and N wallet approvals — one per stream. This keeps each cancellation isolated: a revert on one stream never affects the others.sender can call cancel. The runbook restricts the indexer query to streams where sender == wallet, so the wallet is always the authorized caller.cancelable: false reverts on cancel(...). The runbook drops these at discovery via isCancelable(streamId) (Multicall3-batched). If every surfaced stream is non-cancelable, stop with the message: "None of these vesting streams are cancelable — refunding is not possible. Cancellation was disabled at stream creation."canceled: { _eq: false } and depleted: { _eq: false }.Use the AskUserQuestion tool to fill any missing inputs. Ask only for what is missing — never re-ask for values the user already provided.
0x-prefixed EVM address — case is not enforced; the runbook lowercases it before querying the indexer. This is the sender that will sign each cancel transaction. Ask for this first — both chain and token can be inferred from the indexer once the wallet is known.chainId values, map them to chain names via the Supported Chains table, and offer them as AskUserQuestion options. If exactly one chain has streams, auto-select it and tell the user. See references/cli.md § Chain discovery.AskUserQuestion options (see references/cli.md § Stream discovery).Do not guess or silently apply defaults for these parameters. Only proceed once all inputs are confirmed.
Hand off to references/cli.md for stream discovery, multi-select, preview, confirmation, and per-stream broadcast. The discovery step pipes the indexer response through scripts/filter-cancelable.sh, which Multicall3-batches isCancelable(streamId) and refundableAmountOf(streamId) across every candidate into a single round trip — this drops non-cancelable streams, drops streams with nothing left to recover, and stamps .refundable (base-unit string) onto every survivor.
If you encounter any issues or unexpected errors with this skill, please file an issue at sablier-labs/sablier-skills.
data-ai
This skill should be used when the user asks to "withdraw flow stream", "withdraw from Sablier Flow", "claim flow payment", "claim from Sablier Flow", "drain my flow streams", "withdraw all my Sablier Flow streams", "withdraw from open-ended stream", "claim open-ended stream", or wants an agent to withdraw available tokens from one or more Sablier Flow open-ended payment streams on Ethereum or any EVM-compatible chain on their behalf. Supports batching across multiple streams on a single chain.
data-ai
This skill should be used when the user asks to "cancel a Flow stream", "void a Sablier Flow stream", "stop streaming to X", "refund my Flow deposit", "kill a Sablier Flow payment", "claw back unstreamed funds", "stop a Sablier open-ended stream", or wants an agent to cancel one or more Sablier Flow open-ended payment streams (void + refund where applicable) on Ethereum or any EVM-compatible chain on their behalf.
data-ai
This skill should be used when the user asks to "withdraw vested tokens", "withdraw from Sablier vesting", "withdraw all my Sablier streams", "claim everything", "claim all unlocked tokens", "drain my vesting streams", "claim from Sablier", or wants an agent to withdraw unlocked tokens from one or more Sablier Lockup vesting streams on their behalf. Supports EVM chains (batched withdrawal across multiple streams on a single chain via `withdrawMultiple`) and Solana mainnet-beta (single-stream withdrawals from Lockup Linear v0.1).
data-ai
This skill should be used when the user asks to create "token vesting", "token vesting streams", "onchain vesting", "Ethereum vesting", "EVM vesting", "ERC-20 vesting", "ERC20 vesting", "BEP-20 vesting", or "BEP20 vesting" with Sablier Lockup, wants to create vesting schedules for a token or tokens on Ethereum, EVM-compatible chains, or BNB Chain, needs an agent to run onchain vesting-creation transactions on their behalf.