Back to skills
SkillHub ClubDesign ProductFull StackDesigner

type-driven

Type-driven development with Idris 2 - design type specifications from requirements, then execute CREATE -> VERIFY -> IMPLEMENT cycle. Use when developing with dependent types, refined types, or proof-carrying types in Idris 2; totality and exhaustive pattern matching enforced.

Packaged view

This page reorganizes the original catalog entry around fit, installability, and workflow context first. The original raw source lives below.

Stars
17
Hot score
87
Updated
March 20, 2026
Overall rating
C1.7
Composite score
1.7
Best-practice grade
A88.4

Install command

npx @skill-hub/cli install outlinedriven-odin-claude-plugin-type-driven

Repository

OutlineDriven/odin-claude-plugin

Skill path: skills/type-driven

Type-driven development with Idris 2 - design type specifications from requirements, then execute CREATE -> VERIFY -> IMPLEMENT cycle. Use when developing with dependent types, refined types, or proof-carrying types in Idris 2; totality and exhaustive pattern matching enforced.

Open repository

Best for

Primary workflow: Design Product.

Technical facets: Full Stack, Designer.

Target audience: everyone.

License: Unknown.

Original source

Catalog source: SkillHub Club.

Repository owner: OutlineDriven.

This is still a mirrored public skill entry. Review the repository before installing into production workflows.

What it helps with

  • Install type-driven into Claude Code, Codex CLI, Gemini CLI, or OpenCode workflows
  • Review https://github.com/OutlineDriven/odin-claude-plugin before adding type-driven to shared team environments
  • Use type-driven for development workflows

Works across

Claude CodeCodex CLIGemini CLIOpenCode

Favorites: 0.

Sub-skills: 0.

Aggregator: No.

Original source / Raw SKILL.md

---
name: type-driven
description: Type-driven development with Idris 2 - design type specifications from requirements, then execute CREATE -> VERIFY -> IMPLEMENT cycle. Use when developing with dependent types, refined types, or proof-carrying types in Idris 2; totality and exhaustive pattern matching enforced.
---

# Type-driven development

You are a type-driven development specialist using Idris 2 for dependent type verification. This prompt provides both PLANNING and EXECUTION capabilities.

## Philosophy: Design Types First, Then Implement

Plan dependent types, refined types, and proof-carrying types FROM REQUIREMENTS before any implementation. Types encode the specification. Then execute the full verification and implementation cycle.

---

# PHASE 1: PLANNING - Design Types from Requirements

CRITICAL: Design types BEFORE implementation.

## Extract Type Specifications from Requirements

1. **Identify Type Constraints**
   - Value constraints (positive, non-empty, bounded)
   - Relationship constraints (less than, subset of)
   - State constraints (valid transitions only)
   - Proof obligations (totality, termination)

2. **Formalize as Dependent Types**
   ```idris
   data Positive : Nat -> Type where
     MkPositive : Positive (S n)

   record Account where
     constructor MkAccount
     balance : Nat  -- Non-negative by construction
   ```

## Type Design Templates

### Refined Types

```idris
public export
data Positive : Nat -> Type where
  MkPositive : Positive (S n)

public export
data NonEmpty : List a -> Type where
  IsNonEmpty : NonEmpty (x :: xs)
```

### State-Indexed Types

```idris
public export
data State = Initial | Processing | Complete | Failed

public export
data Workflow : State -> Type where
  MkWorkflow : Workflow Initial

public export
start : Workflow Initial -> Workflow Processing
```

---

# PHASE 2: EXECUTION - CREATE -> VERIFY -> IMPLEMENT

## Constitutional Rules (Non-Negotiable)

1. **CREATE Types First**: All type definitions before implementation
2. **Types Never Lie**: If it doesn't type-check, fix implementation (not types)
3. **Holes Before Bodies**: Use ?holes, let type checker guide implementation
4. **Totality Enforced**: Mark functions total, prove termination
5. **Pattern Match Exhaustive**: All cases covered

## Execution Workflow

### Step 1: CREATE Type Artifacts

```bash
mkdir -p .outline/proofs
cd .outline/proofs
pack new myproject

idris2 --version  # Expect v0.8.0+
```

### Step 2: VERIFY Through Type Checking

```bash
idris2 --check .outline/proofs/src/Types.idr
idris2 --check .outline/proofs/src/*.idr
idris2 --total --check .outline/proofs/src/Operations.idr

HOLE_COUNT=$(rg '\?' .outline/proofs/src/*.idr -c 2>/dev/null | awk -F: '{sum+=$2} END {print sum+0}')
echo "Remaining holes: $HOLE_COUNT"
```

### Step 3: IMPLEMENT Target Code

Map Idris types to target language:

| Idris 2      | TypeScript       | Rust        | Python          |
| ------------ | ---------------- | ----------- | --------------- |
| `Maybe a`    | `T \| null`      | `Option<T>` | `Optional[T]`   |
| `Vect n a`   | `T[]` + assert   | `[T; N]`    | `list` + assert |
| `Fin n`      | `number` + check | bounded int | `int` + check   |
| `Positive n` | `number` + check | NonZeroU32  | `int` + assert  |

## Validation Gates

| Gate          | Command                  | Pass Criteria | Blocking |
| ------------- | ------------------------ | ------------- | -------- |
| Types Compile | `idris2 --check`         | No errors     | Yes      |
| Totality      | `idris2 --total --check` | All total     | Yes      |
| Coverage      | Check "not covering"     | None          | Yes      |
| Holes         | `rg "\\?"`               | Zero          | Yes      |
| Target Build  | `tsc` / `cargo build`    | Success       | Yes      |

## Exit Codes

| Code | Meaning                                 |
| ---- | --------------------------------------- |
| 0    | Types verified, implementation complete |
| 11   | Idris 2 not installed                   |
| 12   | Type check failed                       |
| 13   | Totality check failed                   |
| 14   | Holes remaining                         |
| 15   | Target implementation failed            |
type-driven | SkillHub