Claude Code Plugins

Community-maintained marketplace

Feedback

schema-patterns

@jasonkuhrt/dotfiles
1
0

Effect Schema conventions and patterns. Triggers on Schema class creation, tagged unions, enums, type guards, or test fixtures using Effect Schema.

Install Skill

1Download skill
2Enable skills in Claude

Open claude.ai/settings/capabilities and find the "Skills" section

3Upload to Claude

Click "Upload skill" and select the downloaded ZIP file

Note: Please verify skill by going through its instructions before using it.

SKILL.md

name schema-patterns
description Effect Schema conventions and patterns. Triggers on Schema class creation, tagged unions, enums, type guards, or test fixtures using Effect Schema.

Effect Schema Patterns

Class Instantiation

ALWAYS use Schema.make() for creating instances:

// ✅ GOOD - Use Schema.make()
const user = Schema.make(User)({ name: 'Alice', age: 30 })

// ❌ BAD - Manual construction
const user = { _tag: 'User', name: 'Alice', age: 30 }

Type Guards

ALWAYS use Schema.is() or static .is method:

// ✅ GOOD
if (Standard.is(value)) { ... }
if (Schema.is(Standard)(value)) { ... }

// ❌ BAD - manual _tag check
if (value._tag === 'Standard') { ... }

Enums

ALWAYS inline enum values directly in Schema.Enums():

// ✅ GOOD - inline values, use .enums for runtime access
export const Status = Schema.Enums({
  active: 'active',
  inactive: 'inactive',
})
export type Status = typeof Status.Type
// Runtime: Status.enums.active

// ❌ BAD - separate const object
export const StatusValues = {
  active: 'active',
  inactive: 'inactive',
} as const
export const Status = Schema.Enums(StatusValues)

Key Points

  • Use Schema.make() for type-safe instantiation
  • Use Schema.is() for type predicates, never manual _tag checks
  • Inline enum values directly in Schema.Enums()
  • Access runtime enum values via .enums property