.claude/skills/voltaire-effect-layers/SKILL.md
Layer composition patterns for dependency injection. Use when composing providers, signers, and crypto services.
npx skillsauth add cyotee/crane voltaire-effect-layersInstall 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.
Three-layer architecture: Schema, Effect, Services.
| Layer | Purpose | |-------|---------| | Schema | Validation, type coercion | | Effect | Composable operations | | Services | Stateful resources |
import { Layer } from 'effect'
import { Provider, HttpTransport, Signer } from 'voltaire-effect'
// Combine layers
const AppLayer = Layer.mergeAll(
Provider,
Signer
).pipe(
Layer.provide(HttpTransport('https://eth.llamarpc.com'))
)
// Provide once at edge
program.pipe(Effect.provide(AppLayer))
Layer.mergeAll(Provider, Signer, CryptoLive)
// Provider depends on Transport
const ProviderLayer = Provider.pipe(
Layer.provide(HttpTransport(url))
)
Layer.provideMerge(AdditionalService)
import { Effect, Layer } from 'effect'
import { Signer, Provider, HttpTransport } from 'voltaire-effect'
import { MnemonicAccount } from 'voltaire-effect/native'
import { Secp256k1Live, KeccakLive } from 'voltaire-effect/crypto'
const CryptoLayer = Layer.mergeAll(Secp256k1Live, KeccakLive)
const TransportLayer = HttpTransport('https://eth.llamarpc.com')
const ProviderLayer = Provider.pipe(Layer.provide(TransportLayer))
const WalletLayer = Layer.mergeAll(
Signer.Live,
CryptoLayer,
ProviderLayer
).pipe(
Layer.provideMerge(MnemonicAccount(mnemonic).pipe(Layer.provide(CryptoLayer)))
)
// Single provide
await Effect.runPromise(program.pipe(Effect.provide(WalletLayer)))
// ❌ Don't chain provides
program.pipe(
Effect.provide(Signer.Live),
Effect.provide(Provider),
Effect.provide(HttpTransport(url))
)
// ✅ Compose first, then provide
const AppLayer = Layer.mergeAll(Signer.Live, Provider).pipe(
Layer.provide(HttpTransport(url))
)
program.pipe(Effect.provide(AppLayer))
development
Review UI code for Web Interface Guidelines compliance. Use when asked to "review my UI", "check accessibility", "audit design", "review UX", or "check my site against best practices".
documentation
Write to contracts and send transactions. Use when executing state-changing contract functions.
development
HTTP and WebSocket transports for blockchain connectivity. Use when configuring network connections.
data-ai
Read contract data with type-safe ABI. Use when querying smart contract view/pure functions.