From odin
Designs type specifications from requirements and executes CREATE-VERIFY-IMPLEMENT cycle for refined types, state machines, and proof-carrying types, enforcing totality and exhaustive matching.
npx claudepluginhub outlinedriven/odin-claude-plugin --plugin odinThis skill uses the workspace's default tool permissions.
Types encode the specification -- design from requirements before implementation. Make illegal states unrepresentable (Yaron Minsky). Parse, don't validate (Alexis King). For parsed opaque domain types within trusted boundaries, if the type compiles, the value is valid.
Creates isolated Git worktrees for feature branches with prioritized directory selection, gitignore safety checks, auto project setup for Node/Python/Rust/Go, and baseline verification.
Executes implementation plans in current session by dispatching fresh subagents per independent task, with two-stage reviews: spec compliance then code quality.
Dispatches parallel agents to independently tackle 2+ tasks like separate test failures or subsystems without shared state or dependencies.
Types encode the specification -- design from requirements before implementation. Make illegal states unrepresentable (Yaron Minsky). Parse, don't validate (Alexis King). For parsed opaque domain types within trusted boundaries, if the type compiles, the value is valid.
Modern insight (2025): "Encode invariants in types, not runtime checks" is the evolved formulation. Type richness should match risk -- start simple, add complexity where bugs actually occur. Types serve AI-assisted development: they communicate intent better than comments and reduce LLM hallucinations.
See patterns for language-specific refined types, state machine techniques, and language-specific validation gates. See examples for brief "parse, don't validate" patterns per language. See formal-tools for dependent type systems and verification tools.
Payment = Pending | Processing { id } | Success { id, amount } | Failed { reason }. Compiler ensures every case handled.Client<Disconnected> has no read() method. Compile error if called wrong.EmailAddress(String) with private constructor + validation in new().as-castfn process(action: string) instead of fn process(action: Action)as casts bypassing type checker: Escape hatches that negate type safetyType-Driven Design (static proofs) -> reduces test scope needed
-> Test-Driven Development (examples + edges) -> validates type assumptions
-> Design by Contract (runtime boundaries) -> documents type guarantees
-> Types + TDD + DbC = highest confidence software
| Gate | Pass Criteria | Blocking |
|---|---|---|
| Types Compile | Type checker reports no errors | Yes |
| Exhaustiveness | No missing match/switch cases | Yes |
| Holes | Zero incomplete implementation markers (language-specific -- see patterns) | Yes |
| Target Build | Full build succeeds | Yes |
| Code | Meaning |
|---|---|
| 0 | Types verified, implementation complete |
| 11 | Type checker not available |
| 12 | Type check failed |
| 13 | Exhaustiveness/totality check failed |
| 14 | Type holes remaining |
| 15 | Target implementation failed |