skills/evm-deployment/SKILL.md
Deploy Sablier EVM contracts (Utils, Flow, Lockup, Airdrops, Bob) with full workflow automation. This skill should be used when the user asks to "deploy", "deploy protocol", "deploy to chain", or mentions deployment-related tasks. Handles contract deployment, explorer verification, SDK updates, and initial setup through Init scripts.
npx skillsauth add sablier-labs/agent-skills evm-deploymentInstall 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.
End-to-end deployment workflow for Sablier EVM contracts. Supports Utils, Flow, Lockup, Airdrops, and Bob with protocol-specific adaptations.
Before proceeding, verify Foundry version:
forge -V
Stop if version is below 1.3.6.
Detect the current EVM protocol from package.json:
| Package Name | Protocol | SDK Path |
| -------------------- | -------- | -------------------------------- |
| @sablier/evm-utils | Utils | ../sdk/deployments/comptroller |
| @sablier/flow | Flow | ../sdk/deployments/flow |
| @sablier/lockup | Lockup | ../sdk/deployments/lockup |
| @sablier/airdrops | Airdrops | ../sdk/deployments/airdrops |
| @sablier/bob | Bob | ../sdk/deployments/bob |
Extract version from package.json → "version": "x.y.z" → SDK version is v<x.y>
Execute steps in order, tracking state between each:
Reference: ./references/deploy.md | Examples: ./references/examples.md
Deploy protocol contracts using Foundry. Handles:
Reference: ./references/copy-to-sdk.md
Copy broadcast artifacts to SDK repository:
Reference: ./references/init-setup.md
Creates initial setup for deployed contracts:
Track and carry forward between steps:
| State | Source |
| ------------------ | ---------------------------------------- |
| Protocol name | Detected from package.json |
| Chain ID | From deployment or user input |
| Chain name | Lowercase (e.g., ethereum, arbitrum) |
| Deployment type | deterministic or non-deterministic |
| Contract addresses | From broadcast JSON returns field |
| Block number | From deployment receipt (hex → decimal) |
| SDK version | From package.json version |
| Protocol | Deterministic Script | Non-deterministic Script |
| -------- | ------------------------------------------- | ------------------------------ |
| Utils | DeployDeterministicComptrollerProxy.s.sol | DeployComptrollerProxy.s.sol |
| Utils | DeployDeterministicERC20Faucet.s.sol | DeployERC20Faucet.s.sol |
| Flow | DeployDeterministicProtocol.s.sol | DeployProtocol.s.sol |
| Lockup | DeployDeterministicProtocol.s.sol | DeployProtocol.s.sol |
| Airdrops | DeployDeterministicFactories.s.sol | DeployFactories.s.sol |
| Bob | DeployDeterministicBob.s.sol | DeployBob.s.sol |
| Bob | DeployDeterministicEscrow.s.sol | DeployEscrow.s.sol |
After completion, provide:
When deploying Airdrops test data, campaigns are created via factory:
| Factory | Campaign Contract |
| ------------------------------ | ----------------------- |
| SablierFactoryMerkleInstant | SablierMerkleInstant |
| SablierFactoryMerkleLL | SablierMerkleLL |
| SablierFactoryMerkleLT | SablierMerkleLT |
| SablierFactoryMerkleVCA | SablierMerkleVCA |
| SablierFactoryMerkleExecute | SablierMerkleExecute |
Campaign addresses are returned in broadcast returns field, not contractAddress.
development
This skill should be used when the user asks to "create a state machine", "add xState", "use xState with React", "implement actor-based state", "manage complex state with state machines", "use xState with Effect", "integrate Effect-ts with xState", mentions xState hooks (useMachine, useActor, useSelector), or discusses finite state machines in React applications.
tools
This skill should be used when the user asks about "viem", "viem client", "viem actions", "TypeScript Ethereum", "createPublicClient", "createWalletClient", "parseEther", "formatEther", "readContract", "writeContract", or mentions using viem for blockchain interactions.
development
This skill should be used when the user asks about "Tailwind CSS", "tailwind-variants", "tv() function", "CSS-first configuration", "Tailwind breaking changes", mentions styling with Tailwind utilities, gradient syntax, or component variants with TypeScript.
development
This skill should be used when the user asks to "analyze a screenshot", "generate implementation spec", "create SPEC.md from screenshot", "extract design specs", "spec from image", or provides website screenshots and wants detailed implementation guidance.