
Ash Framework
Ash Framework, resources, actions, policies, aggregates, calculations...
Install
npx skills add oliver-kriska/claude-elixir-phoenix --skill ash-framework -g -a claude-code -y- Repository
- oliver-kriska/claude-elixir-phoenix572
- Category
- Engineering
- Updated
- 5d ago
- License
- MIT
- Context cost
- Lightabout 1,272 tokens
- Runs scripts
- No, instructions only
What it does
Ash Framework, resources, actions, policies, aggregates, calculations, AshPhoenix.Form, LiveView, migrations. Use when generating resources via mix ash.codegen, editing changes, checks, types, validations, or domain code interfaces.
Ash Framework Reference
Reference for Ash Framework in Phoenix/LiveView projects. Ash complements Phoenix/Ecto, LiveView, security, and OTP Iron Laws still apply. Only data access patterns shift toward Ash actions and domain code interfaces.
Iron Laws
- USE DOMAIN CODE INTERFACES, Never call
Ash.create/Ash.readdirectly in LiveViews or Controllers; use domain code interfaces:MyApp.Accounts.register_user()notAsh.create(User, attrs) - SET ACTOR/SCOPE AT QUERY PREP, NOT EXECUTION, Give
actor:orscope:tofor_read/for_create/for_action(prep), NOT toAsh.read!/Ash.create!(execution); execution-level actor bypasses row-level policy evaluation. If project usesAsh.Scope, usescope:consistently instead of bareactor:, do not mix styles - GENERATORS FIRST, Before writing Ash code manually, run
mix ash.gen.resourceormix ash.gen.domainwith--yes; checkmix help ash.gen.<task>for options - CODEGEN AFTER RESOURCE CHANGES, Always run
mix ash.codegenafter modifying resources; this generates migrations from resource snapshots, never write AshPostgres migrations by hand - ACTIONS OVER FUNCTIONS, Put business logic in named actions, not domain functions; expose via code interfaces defined on the domain
- NEVER EDIT RESOURCE SNAPSHOTS,
priv/resource_snapshots/is owned exclusively bymix ash.codegen; manual edits corrupt migration tracking - NO DIRECT
Repo.*IN ASH PROJECTS,Repo.all/get/insertbypass Ash policies and notifications; use domain code interfaces. AnyRepocall in an Ash project is an escape hatch and must be documented
Quick Reference
Domain Code Interface Pattern
# Domain definition
defmodule MyApp.Accounts do
use Ash.Domain
resources do
resource MyApp.Accounts.User do
define :register_user, action: :create, args: [:email, :name]
define :get_user_by_email, action: :read, get_by: [:email]
end
end
end
