Use when Effect dependency injection patterns including Context, Layer, service definitions, and dependency composition. Use for managing dependencies in Effect applications.
View on GitHubFebruary 3, 2026
Select agents to install to:
npx add-skill https://github.com/TheBushidoCollective/han/blob/main/frameworks/effect/skills/effect-dependency-injection/SKILL.md -a claude-code --skill effect-dependency-injectionInstallation paths:
.claude/skills/effect-dependency-injection/# Effect Dependency Injection
Master dependency injection and management in Effect applications using Context
and Layers. This skill covers service definitions, layer construction, and
composing complex dependency graphs.
## Context and Services
### Defining Services with Context.Tag
Services are defined using Context.Tag to create type-safe identifiers:
```typescript
import { Context, Effect } from "effect"
// Define service interface
interface UserService {
getUser: (id: string) => Effect.Effect<User, UserNotFound, never>
createUser: (data: UserData) => Effect.Effect<User, ValidationError, never>
}
// Create service tag
const UserService = Context.GenericTag<UserService>("UserService")
// Using the service
const program = Effect.gen(function* () {
const userService = yield* UserService
const user = yield* userService.getUser("123")
return user
})
// Effect<User, UserNotFound, UserService>
```
### Multiple Services
```typescript
import { Context, Effect } from "effect"
interface Logger {
info: (message: string) => Effect.Effect<void, never, never>
error: (message: string) => Effect.Effect<void, never, never>
}
interface Database {
query: <T>(sql: string) => Effect.Effect<T, DbError, never>
}
const Logger = Context.GenericTag<Logger>("Logger")
const Database = Context.GenericTag<Database>("Database")
// Using multiple services
const program = Effect.gen(function* () {
const logger = yield* Logger
const db = yield* Database
yield* logger.info("Querying database...")
const users = yield* db.query<User[]>("SELECT * FROM users")
yield* logger.info(`Found ${users.length} users`)
return users
})
// Effect<User[], DbError, Logger | Database>
```
## Creating Layers
Layers are blueprints for constructing services.
### Layer.succeed - Simple Service Implementation
```typescript
import { Context, Effect, Layer } from "effect"
interface Config {
apiUrl: string
timeout: number
}
const Config = Context.GenericTag<Config>("Conf