effect-patterns-platform-getting-started
Provides starter patterns for using @effect/platform for system-level operations.
Install
mkdir -p .claude/skills/effect-patterns-platform-getting-started && curl -L -o skill.zip "https://agentskills.codes/api/skills/download/6042" && unzip -o skill.zip -d .claude/skills/effect-patterns-platform-getting-started && rm skill.zipInstalls to .claude/skills/effect-patterns-platform-getting-started
Activation
This is the description your AI agent reads to decide when to run this skill — the better it matches your request, the more reliably it fires.
Effect-TS patterns for Platform Getting Started. Use when working with platform getting started in Effect-TS applications.Key capabilities
- →Perform cross-platform system operations
- →Read and write files with type safety
- →Access environment variables with validation
- →Provide default values for configuration
- →Integrate with Node.js or Bun runtimes
How it works
The skill utilizes Effect Platform to wrap system operations, providing type-safe access to file systems and environment variables. It enforces validation at the application level through Effect's functional patterns.
Inputs & outputs
When to use effect-patterns-platform-getting-started
- →Setting up file system operations
- →Reading and writing configuration files
- →Integrating platform layers in Effect apps
About this skill
Effect-TS Patterns: Platform Getting Started
This skill provides 2 curated Effect-TS patterns for platform getting started. Use this skill when working on tasks related to:
- platform getting started
- Best practices in Effect-TS applications
- Real-world patterns and solutions
🟢 Beginner Patterns
Your First Platform Operation
Rule: Use @effect/platform for cross-platform system operations with Effect integration.
Good Example:
import { Effect } from "effect"
import { FileSystem } from "@effect/platform"
import { NodeContext, NodeRuntime } from "@effect/platform-node"
// Read a file - returns Effect<string, PlatformError>
const readConfig = Effect.gen(function* () {
const fs = yield* FileSystem.FileSystem
// Read file as UTF-8 string
const content = yield* fs.readFileString("./config.json")
return JSON.parse(content)
})
// Write a file
const writeLog = Effect.gen(function* () {
const fs = yield* FileSystem.FileSystem
yield* fs.writeFileString(
"./app.log",
`Started at ${new Date().toISOString()}\n`
)
})
// Combine operations
const program = Effect.gen(function* () {
const config = yield* readConfig
yield* Effect.log(`Loaded config: ${config.appName}`)
yield* writeLog
yield* Effect.log("Log file created")
})
// Run with Node.js platform
program.pipe(
Effect.provide(NodeContext.layer),
NodeRuntime.runMain
)
Rationale:
Effect Platform provides type-safe, cross-platform system operations. Use @effect/platform-node for Node.js or @effect/platform-bun for Bun.
Platform wraps system operations in Effect, giving you:
- Type safety - File operations return
Effect<Content, PlatformError> - Resource management - Files are automatically closed
- Cross-platform - Same code works on Node.js, Bun, browser
- Composability - Chain file ops with other effects
Access Environment Variables
Rule: Use Effect to access environment variables with proper error handling.
Good Example:
import { Effect, Config, Option } from "effect"
// ============================================
// BASIC: Read required variable
// ============================================
const getApiKey = Config.string("API_KEY")
const program1 = Effect.gen(function* () {
const apiKey = yield* getApiKey
yield* Effect.log(`API Key: ${apiKey.slice(0, 4)}...`)
})
// ============================================
// OPTIONAL: With default value
// ============================================
const getPort = Config.number("PORT").pipe(
Config.withDefault(3000)
)
const program2 = Effect.gen(function* () {
const port = yield* getPort
yield* Effect.log(`Server will run on port ${port}`)
})
// ============================================
// OPTIONAL: Return Option instead of failing
// ============================================
const getOptionalFeature = Config.string("FEATURE_FLAG").pipe(
Config.option
)
const program3 = Effect.gen(function* () {
const feature = yield* getOptionalFeature
if (Option.isSome(feature)) {
yield* Effect.log(`Feature enabled: ${feature.value}`)
} else {
yield* Effect.log("Feature flag not set")
}
})
// ============================================
// COMBINED: Multiple variables as config object
// ============================================
const AppConfig = Config.all({
apiKey: Config.string("API_KEY"),
apiUrl: Config.string("API_URL"),
port: Config.number("PORT").pipe(Config.withDefault(3000)),
debug: Config.boolean("DEBUG").pipe(Config.withDefault(false)),
})
const program4 = Effect.gen(function* () {
const config = yield* AppConfig
yield* Effect.log(`API URL: ${config.apiUrl}`)
yield* Effect.log(`Port: ${config.port}`)
yield* Effect.log(`Debug: ${config.debug}`)
})
// ============================================
// RUN: Will fail if required vars missing
// ============================================
Effect.runPromise(program4).catch((error) => {
console.error("Missing required environment variables")
console.error(error)
})
Rationale:
Access environment variables using Effect's built-in functions or Platform's environment service for type-safe configuration.
Environment variables can be missing or malformed. Effect helps you:
- Handle missing vars - Return
Optionor fail with typed error - Validate values - Parse and validate with Schema
- Provide defaults - Fallback values when vars are missing
- Document requirements - Types show what's needed
When not to use it
- →When not using Effect-TS in the application
Prerequisites
Limitations
- →Requires Effect-TS ecosystem integration
- →Platform-specific packages must be chosen based on runtime
How it compares
Unlike manual Node.js fs calls, this approach returns typed Effect objects that handle resource management and errors automatically.
Compared to similar skills
effect-patterns-platform-getting-started side by side with the closest alternatives in the catalog.
| Skill | Installs | Updated | Safety | Difficulty |
|---|---|---|---|---|
| effect-patterns-platform-getting-started (this skill) | 1 | 7mo | No flags | Beginner |
| supabase-developer | 95 | 7mo | Review | Intermediate |
| telegram-mini-app | 62 | 6mo | Review | Advanced |
| stripe-integration | 48 | 2mo | No flags | Advanced |
Try saying
Example prompts that trigger this skill in your AI assistant.
More by PaulJPhilp
View all by PaulJPhilp →You might also like
supabase-developer
daffy0208
Build full-stack applications with Supabase (PostgreSQL, Auth, Storage, Real-time, Edge Functions). Use when implementing authentication, database design with RLS, file storage, real-time features, or serverless functions.
telegram-mini-app
davila7
Expert in building Telegram Mini Apps (TWA) - web apps that run inside Telegram with native-like experience. Covers the TON ecosystem, Telegram Web App API, payments, user authentication, and building viral mini apps that monetize. Use when: telegram mini app, TWA, telegram web app, TON app, mini app.
stripe-integration
wshobson
Implement Stripe payment processing for robust, PCI-compliant payment flows including checkout, subscriptions, and webhooks. Use when integrating Stripe payments, building subscription systems, or implementing secure checkout flows.
nodejs-best-practices
davila7
Node.js development principles and decision-making. Framework selection, async patterns, security, and architecture. Teaches thinking, not copying.
bullmq-specialist
davila7
BullMQ expert for Redis-backed job queues, background processing, and reliable async execution in Node.js/TypeScript applications. Use when: bullmq, bull queue, redis queue, background job, job queue.
shopify-development
davila7
Build Shopify apps, extensions, themes using GraphQL Admin API, Shopify CLI, Polaris UI, and Liquid. TRIGGER: "shopify", "shopify app", "checkout extension", "admin extension", "POS extension", "shopify theme", "liquid template", "polaris", "shopify graphql", "shopify webhook", "shopify billing", "app subscription", "metafields", "shopify functions"