This library is aims to build AI development tools for the Ash Framework. It is not an official Ash module.
Resource browser, live updating on compile, bidirectional sync w/ source code, tracing of actions that execute as they execute, resource graph visualizer w/ canvas instead of mermaid, monitor reactors as they run etc.
The premise is to have a single set of Ash resources that can be used by
| Tool | UI | Chat Bot | MCP Server |
|---|---|---|---|
| ash.codegen --check | ✅ | ✅ | ❌ |
| ash.codegen --dry-run | ✅ | ✅ | ❌ |
| ash.codegen <migration_file> | ✅ | ✅ | ❌ |
| ash.gen.domain <domain_name> | ✅ | ✅ | ❌ |
| ash.gen.resource | ✅ | ❌ | ❌ |
- Ash Framework — defines MCP services as embedded, stateless resources.
- Ash AI — exposes the tools in a chat interface.
- Phoenix LiveView — provides a chat interface and forms for human developers to interact with tools.
- Let AI agents safely interact with your dev environment using domain-aware tools
- Provide consistent, convention-driven automation surfaces for common Ash/Phoenix tasks
- Keep humans in the loop with a LiveView UI
This is an experimental playground — feedback and contributions welcome.
See it here - The site will spin down after a period of inactivity; give it time to rehydrate on first request.
{:ash_studio, "~> 0.1", github: "ketupia/ash_studio", only: :dev},
Add AshStudio.Tasks to your app's `:ash_domains`
```elixir
config :your_app,
ash_domains: [AshStudio.Tasks]
```
Add :ash_studio to your app's `:host_app` config
```elixir
config :ash_studio,
check_migrations: true,
ash_domains: [AshStudio.Tasks],
host_app: :ash_studio_demo,
open_ai_model: "gpt-4o-mini"
```
Add ash_studio files to your module.exports
```
module.exports = {
content: [
"../deps/ash_studio/**/*.*ex",
// other content paths...
]
}
### Routes
In your router file
```elixir
import AshStudioWeb.Router
ash_studio_routes(path: "/studio", pipe_through: [:browser])
```
You must use `/studio` as the path presently.
### Open AI Config
Add your OpenAI API key as an environment variable.
e.g.
```
System.put_env("open_api_key", "your key here")
```
Specify the Open AI model to use
```elixir
config :ash_studio, :open_ai_model, "gpt-4o-mini"
```