Use when Effect dependency injection patterns including Context, Layer, service definitions, and dependency composition. Use for managing dependencies in Effect applications.
View on GitHubTheBushidoCollective/han
jutsu-effect
February 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