Bridge Ash Framework resources with Jido agents. Generates Jido.Action modules from Ash actions at compile time.
- Adds a
jidoDSL section to Ash resources - Generates
Jido.Actionmodules at compile time for selected actions - Maps Ash argument types to NimbleOptions schemas
- Runs actions via Ash with provided
domain,actor, andtenant - Converts Ash errors to
Jido.Action.Error(Splode-based) errors
- Auto-discover domains or resources (domain is explicit and required)
- Add pagination or query-layer magic
- Bypass Ash authorization, policies, or data layers
mix igniter.install ash_jidoOr add manually to mix.exs:
def deps do
[
{:ash_jido, "~> 0.1.0"}
]
enddefmodule MyApp.User do
use Ash.Resource,
domain: MyApp.Accounts,
extensions: [AshJido]
actions do
create :register
read :by_id
update :profile
end
jido do
action :register, name: "create_user"
action :by_id, name: "get_user"
action :profile
end
endGenerated modules:
{:ok, user} = MyApp.User.Jido.Register.run(
%{name: "John", email: "[email protected]"},
%{domain: MyApp.Accounts}
)The domain is required in context. An ArgumentError is raised if missing.
context = %{
domain: MyApp.Accounts, # REQUIRED
actor: current_user, # optional: for authorization
tenant: "org_123" # optional: for multi-tenancy
}
MyApp.User.Jido.Create.run(params, context)jido do
action :create
action :read, name: "list_users", description: "List all users"
action :update, tags: ["user-management"]
action :special, output_map?: false # preserve Ash structs
endjido do
all_actions
all_actions except: [:destroy, :internal]
all_actions only: [:create, :read]
all_actions tags: ["public-api"]
end| Option | Type | Default | Description |
|---|---|---|---|
name |
string | auto-generated | Custom Jido action name |
module_name |
atom | Resource.Jido.Action |
Custom module name |
description |
string | from Ash action | Action description |
tags |
list(string) | [] |
Tags for categorization |
output_map? |
boolean | true |
Convert structs to maps |
| Action Type | Pattern | Example |
|---|---|---|
:create |
create_<resource> |
create_user |
:read (:read) |
list_<resources> |
list_users |
:read (:by_id) |
get_<resource>_by_id |
get_user_by_id |
:update |
update_<resource> |
update_user |
:destroy |
delete_<resource> |
delete_user |
AshJido: :domain must be provided in context
- Pass
%{domain: MyApp.Domain}as the second argument torun/2
Update actions require an 'id' parameter
- Include
idin params for:updateand:destroyactions
Action X not found in resource
- Check
jido action :...entries match defined Ash actions
- Elixir: ~> 1.18
- Ash: ~> 3.12
- Jido: ~> 1.1
- Getting Started — comprehensive usage
- Interactive Demo — try in Livebook
- Usage Rules — AI/LLM patterns
MIT