EF

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.zip

Installs 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.
122 chars✓ has a “when” trigger
Beginner

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

You give it
File path or environment variable key
You get back
Effect-wrapped result or configuration object

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:

  1. Type safety - File operations return Effect<Content, PlatformError>
  2. Resource management - Files are automatically closed
  3. Cross-platform - Same code works on Node.js, Bun, browser
  4. 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:

  1. Handle missing vars - Return Option or fail with typed error
  2. Validate values - Parse and validate with Schema
  3. Provide defaults - Fallback values when vars are missing
  4. Document requirements - Types show what's needed


When not to use it

  • When not using Effect-TS in the application

Prerequisites

@effect/platform@effect/platform-node or @effect/platform-bun

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.

SkillInstallsUpdatedSafetyDifficulty
effect-patterns-platform-getting-started (this skill)17moNo flagsBeginner
supabase-developer957moReviewIntermediate
telegram-mini-app626moReviewAdvanced
stripe-integration482moNo flagsAdvanced

Try saying

Example prompts that trigger this skill in your AI assistant.

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.

95185

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.

62163

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.

48165

nodejs-best-practices

davila7

Node.js development principles and decision-making. Framework selection, async patterns, security, and architecture. Teaches thinking, not copying.

28120

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.

2595

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"

1299

Search skills

Search the agent skills registry