SkillAgentSearch skills...

ecto-patterns

Use when a task touches Ecto, even a how-to question: schemas, changesets, validations, queries, preloads, Multi, migrations, constraints, money fields. Load it before writing Ecto code. Skip for Ash.

Install / Use

npx skills add oliver-kriska/claude-elixir-phoenix --skill ecto-patterns

Installs into whichever agent you are using.

About this skill
📄

SKILL.md

Installable skill definition

Quality Score

84/100

Supported Platforms

Universal

Our assessment of ecto-patterns

ecto-patterns scores 84/100 on our quality scale, 772nd of 1,215 Content & Media skills we index.

Its SKILL.md is 3.5 KB long, well organised into 8 sections with 1 code example: a solid amount of guidance for an agent.

It has 560 GitHub stars, a meaningful sign that others use it.

Substance
26/30
Structure
17/20
Description
15/15
Adoption
12/20
Freshness
15/15

Maintenance, license and trust

  • The repository was last updated 2 days ago, so ecto-patterns is actively maintained.
  • It is released under the MIT license, a permissive license that allows use, modification and commercial use with attribution.
  • Its trust signals score 100/100, with no cautions. These come from repository metadata, not a code audit — read the skill file before letting an agent act on it.

ecto-patterns compared with similar skills

All 4 of these similar skills score higher than ecto-patterns; compare them before choosing.

SkillScoreStarsUpdatedFormat
ecto-patterns (this skill)by oliver-kriska845602d agoSKILL.md
Agent-Reachby Panniantong10089.8k18d agoCLAUDE.md
headroomby headroomlabs-ai10074.4ktodayCLAUDE.md
Scraplingby D4Vinci10085.5ktodayMCP Server
crawl4aiby unclecode10084.7k8d agoMCP Server

Frequently asked questions

How do I install ecto-patterns?
Run npx skills add oliver-kriska/claude-elixir-phoenix --skill ecto-patterns. The install tabs above show the steps for each supported agent.
Which AI agents does ecto-patterns work with?
It is written for Universal, as a SKILL.md file. Other agents that read the same format can often use it too.
Is ecto-patterns safe to use?
It is MIT-licensed and scores 100/100 on trust signals. Skills are instructions an agent will follow, so read the file before installing it and do not approve commands you do not understand.
Is ecto-patterns still maintained?
The repository was last updated 2 days ago, so ecto-patterns is actively maintained.

name: ecto-patterns description: "Use when a task touches Ecto, even a how-to question: schemas, changesets, validations, queries, preloads, Multi, migrations, constraints, money fields. Load it before writing Ecto code. Skip for Ash." effort: medium user-invocable: false paths:

  • "**/migrations/*.exs"
  • "**/*_schema.ex"
  • "**/changeset.ex"

Ecto Patterns Reference

Reference for working with Ecto schemas, queries, and migrations.

Iron Laws — Never Violate These

  1. CHANGESETS ARE FOR EXTERNAL DATA — Use cast/4 for user/API input, change/2 or put_change/3 for internal trusted data
  2. NEVER USE :float FOR MONEY — Always use :decimal or :integer (cents)
  3. NO RAILS-STYLE POLYMORPHIC ASSOCIATIONS — They break foreign key constraints; use multiple nullable FKs or separate join tables
  4. ALWAYS PIN VALUES IN QUERIES — u.name == ^user_input is safe, string interpolation causes SQL injection
  5. PRELOAD COLLECTIONS, NOT INDIVIDUALS — Preloading in loops = N+1 queries
  6. CONSTRAINTS BEAT VALIDATIONS FOR RACE CONDITIONS — Validations provide quick feedback, constraints provide DB-level safety
  7. SEPARATE QUERIES FOR has_many, JOIN FOR belongs_to — Avoids row multiplication
  8. NO IMPLICIT CROSS JOINS — from(a in A, b in B) without on: creates Cartesian product
  9. DEDUP BEFORE cast_assoc WITH SHARED DATA — When multiple parents share child data, deduplicate child records BEFORE building changesets. Dedup only works within a single changeset

Quick Schema Template

defmodule MyApp.Context.Entity do
  use Ecto.Schema
  import Ecto.Changeset

  @primary_key {:id, :binary_id, autogenerate: true}
  @foreign_key_type :binary_id

  schema "entities" do
    field :name, :string
    field :status, Ecto.Enum, values: [:draft, :active, :archived]
    field :amount_cents, :integer  # Never :float for money!
    belongs_to :user, MyApp.Accounts.User
    timestamps(type: :utc_datetime_usec)
  end

  def changeset(entity, attrs) do
    entity
    |> cast(attrs, [:name, :status, :amount_cents])
    |> validate_required([:name])
    |> foreign_key_constraint(:user_id)
  end
end

Quick Decisions

cast vs put_change vs change

| Function | Use When | |----------|----------| | cast/4 | External data (user input, API) | | put_change/3 | Internal trusted data (timestamps, computed) | | change/2 | Internal data from existing struct |

Preload Strategy

| Relationship | Strategy | |--------------|----------| | belongs_to | JOIN (single query) | | has_many | Separate queries (avoid row multiplication) |

Common Anti-patterns

| Wrong | Right | |-------|-------| | field :amount, :float | field :amount_cents, :integer | | "SELECT * WHERE name = '#{name}'" | from(u in User, where: u.name == ^name) | | Repo.all(User) \|> Enum.filter(& &1.active) | from(u in User, where: u.active) | | Preloading in loops | Repo.preload(posts, :comments) | | Repo.get!(User, user_id) with user input | Repo.get(User, id) + handle nil | | {:ok, _} = Repo.update(cs) inside Repo.transaction | case/with + Repo.rollback(cs) (see transactions.md) |

References

For detailed patterns, see:

  • ${CLAUDE_SKILL_DIR}/references/changesets.md - cast vs put_change, custom validations, prepare_changes
  • ${CLAUDE_SKILL_DIR}/references/queries.md - Composable queries, dynamic, subqueries, preloading
  • ${CLAUDE_SKILL_DIR}/references/migrations.md - Safe migrations, concurrent indexes, NOT NULL
  • ${CLAUDE_SKILL_DIR}/references/transactions.md - Repo.transact, Ecto.Multi, upserts

Related Skills

View on GitHub
GitHub Stars560
CategoryContent
Updated2d ago
Forks44

Languages

Python

Trust signals

100/100

From repository metadata: license, adoption, age and documentation. Not a code audit — see the Safety scan above for what the skill file itself contains.

No cautions