Dsql
awslabs/agent-plugins
Build with Aurora DSQL — manage schemas, execute queries, handle migrations, diagnose query plans, diagnose cluster performance, load data, and develop applications with a serverless, distributed…
Designs and debugs Elixir persistence with Ecto: schemas, changesets, queries, preloads, migrations and multi-tenancy, kept within application contexts.
$ npx skills add georgeguimaraes/elixir-agent-tools --skill ecto -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install georgeguimaraes/elixir-agent-tools ecto --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/georgeguimaraes/elixir-agent-tools.git skills-src && mkdir -p .claude/skills && cp -r skills-src/plugins/elixir-dev/skills/ecto .claude/skills/ecto && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "ecto" agent skill from https://github.com/georgeguimaraes/elixir-agent-tools/tree/main/plugins/elixir-dev/skills/ecto into .claude/skills/ecto/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "ecto", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/georgeguimaraes/elixir-agent-tools/tree/main/plugins/elixir-dev/skills/ectoType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add georgeguimaraes/elixir-agent-tools --skill ecto -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install georgeguimaraes/elixir-agent-tools ecto --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/georgeguimaraes/elixir-agent-tools.git skills-src && mkdir -p .agents/skills && cp -r skills-src/plugins/elixir-dev/skills/ecto .agents/skills/ecto && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "ecto" agent skill from https://github.com/georgeguimaraes/elixir-agent-tools/tree/main/plugins/elixir-dev/skills/ecto into .agents/skills/ecto/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "ecto", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add georgeguimaraes/elixir-agent-tools --skill ecto -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install georgeguimaraes/elixir-agent-tools ecto --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/georgeguimaraes/elixir-agent-tools.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/plugins/elixir-dev/skills/ecto .cursor/skills/ecto && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "ecto" agent skill from https://github.com/georgeguimaraes/elixir-agent-tools/tree/main/plugins/elixir-dev/skills/ecto into .cursor/skills/ecto/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "ecto", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/georgeguimaraes/elixir-agent-tools.git --path plugins/elixir-dev/skills/ecto--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add georgeguimaraes/elixir-agent-tools --skill ecto -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install georgeguimaraes/elixir-agent-tools ecto --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/georgeguimaraes/elixir-agent-tools.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/plugins/elixir-dev/skills/ecto .gemini/skills/ecto && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "ecto" agent skill from https://github.com/georgeguimaraes/elixir-agent-tools/tree/main/plugins/elixir-dev/skills/ecto into .gemini/skills/ecto/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "ecto", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install georgeguimaraes/elixir-agent-tools ectoInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add georgeguimaraes/elixir-agent-tools --skill ecto -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/georgeguimaraes/elixir-agent-tools.git skills-src && mkdir -p .github/skills && cp -r skills-src/plugins/elixir-dev/skills/ecto .github/skills/ecto && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "ecto" agent skill from https://github.com/georgeguimaraes/elixir-agent-tools/tree/main/plugins/elixir-dev/skills/ecto into .github/skills/ecto/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "ecto", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add georgeguimaraes/elixir-agent-tools --skill ecto -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install georgeguimaraes/elixir-agent-tools ecto --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/georgeguimaraes/elixir-agent-tools.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/plugins/elixir-dev/skills/ecto .opencode/skills/ecto && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "ecto" agent skill from https://github.com/georgeguimaraes/elixir-agent-tools/tree/main/plugins/elixir-dev/skills/ecto into .opencode/skills/ecto/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "ecto", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
ectoDesigns and debugs Elixir persistence with Ecto: schemas, changesets, queries, preloads, migrations and multi-tenancy, kept within application contexts.
The skill starts from the idea that a context changes what words mean, so each bounded context may have its own Product schema and table. Design goes top-down from subdomain to context to entity, cross-context references use IDs rather than associations, and queries go through the context. Domain patterns are written as pipelines, with events passed as data structs. It also keeps schema and table apart: embedded schemas serve forms and API payloads, and one schema can have several changesets such as registration, profile and admin.
For multi-tenancy it recommends composite foreign keys and prepare_query/3 for automatic scoping, raising when org_id is missing. For preloads, separate queries suit large has-many sets and join preloads suit belongs-to and has-one, since joins can use ten times the memory on has-many. Plain CRUD contexts are fine, and generators cover simple cases. It lists gotchas from the Ecto core team, including CTEs not inheriting the schema prefix in multi-tenant apps and parameterized queries not being prepared statements.
Read from SKILL.md and the folder at commit ac3a5a1. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
No scripts in the folder and no shell commands in SKILL.md (its code samples are elixir).
From the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md.
From URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Ecto Persistence Patterns loads about 1.2k tokens when it runs. Until then it costs about 61 tokens; SKILL.md has 444 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
The full file from georgeguimaraes/elixir-agent-tools at commit ac3a5a1, republished under its Apache-2.0 licence (© georgeguimaraes). 444 words, ~1,163 tokens.
.claude/skills/ecto/SKILL.md (or your agent's skills folder).Model persistence, compose queries, and keep data access within application boundaries.
Context isn't just a namespace—it changes what words mean. "Product" means different things in Checkout (SKU, name), Billing (SKU, cost), and Fulfillment (SKU, warehouse). Each bounded context may have its OWN Product schema/table.
Think top-down: Subdomain → Context → Entity. Not "What context does Product belong to?" but "What is a Product in this business domain?"
schema "cart_items" do
field :product_id, :integer # Reference by ID
# NOT: belongs_to :product, Catalog.Product
endQuery through the context, not across associations. Keeps contexts independent and testable.
def create_product(params) do
params
|> Products.build() # Factory: unstructured → domain
|> Products.validate() # Aggregate: enforce invariants
|> Products.insert() # Repository: persist
endUse events (as data structs) to compose bounded contexts with minimal coupling.
| Use Case | Approach |
|---|---|
| Database table | Standard schema/2 |
| Form validation only | embedded_schema/1 |
| API request/response | Embedded schema or schemaless |
def registration_changeset(user, attrs) # Full validation + password
def profile_changeset(user, attrs) # Name, bio only
def admin_changeset(user, attrs) # Role, verified_atDifferent operations = different changesets.
add :post_id, references(:posts, with: [org_id: :org_id], match: :full)Use prepare_query/3 for automatic scoping. Raise if org_id missing.
| Approach | Best For |
|---|---|
| Separate preloads | Has-many with many records (less memory) |
| Join preloads | Belongs-to, has-one (single query) |
Join preloads can use 10x more memory for has-many.
"If you have a CRUD bounded context, go for it. No need to add complexity."
Use generators for simple cases. Add DDD patterns only when business logic demands it.
In multi-tenant apps, CTEs don't get the parent query's prefix.
Fix: Explicitly set prefix: %{recursive_query | prefix: "tenant"}
WHERE id = $1 — always used by Ectopgbouncer: Use prepare: :unnamed (disables prepared statements, keeps parameterized queries).
More pools with fewer connections = better for benchmarks. But with mixed fast/slow queries, a single larger pool gives better latency.
Rule: pool_count for uniform workloads, larger pool_size for real apps.
Cachex, separate GenServers, or anything outside the test process won't share the sandbox transaction.
Fix: Make the external service use the test process, or accept it's not in the same transaction.
PostgreSQL rejects null bytes even though they're valid UTF-8.
Fix: Sanitize at boundaries: String.replace(string, "\x00", "")
has_many :comments, Comment, preload_order: [desc: :inserted_at]Note: Doesn't work for through associations.
Ecto.Migrator.run(Repo, [{0, Migration1}, {1, Migration2}], :up, opts)Repo.insert/1 over Repo.insert!/1—handle {:ok, _} / {:error, _} explicitlyRepo.transact/1 (Ecto 3.12+) for simple transactions instead of Ecto.Multiprepare: :unnamedAny of these? Re-read the Gotchas section.
© georgeguimaraes, Apache-2.0. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
Just SKILL.md in plugins/elixir-dev/skills/ecto of georgeguimaraes/elixir-agent-tools.
Open the folder on GitHubat commit ac3a5a1
Ecto Persistence Patterns next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Ecto Persistence Patterns this skillgeorgeguimaraes/elixir-agent-tools | 184 | — | ~1.2k | Automated safety check: Pass | Apache-2.0 | |
| Dsqlawslabs/agent-plugins | 915 | — | ~6.9k | Automated safety check: Pass | Apache-2.0 | |
| DB SculptorEliasOulkadi/shokunin | 114 | — | ~3.1k | Automated safety check: Notes | MIT | |
| Jpa Patternsaffaan-m/ECC | 276k | 5 repos | ~1.2k | Automated safety check: Pass | MIT | |
| Prisma Expertdavila7/claude-code-templates | 32k | 7 repos | ~2.6k | Automated safety check: Pass | MIT | |
| Discover Databaserand/cc-polymath | 181 | — | ~2k | Automated safety check: Pass | MIT |
awslabs/agent-plugins
Build with Aurora DSQL — manage schemas, execute queries, handle migrations, diagnose query plans, diagnose cluster performance, load data, and develop applications with a serverless, distributed…
EliasOulkadi/shokunin
Design database schemas with Prisma/Drizzle, PostgreSQL index strategy (B-tree, GIN, GiST, BRIN, Hash), query optimization (EXPLAIN ANALYZE), migration safety (expand/contract, zero-downtime), and…
affaan-m/ECC
JPA/Hibernate patterns for entity design, relationships, query optimization, transactions, auditing, indexing, pagination, and pooling in Spring Boot.
davila7/claude-code-templates
Prisma ORM expert for schema design, migrations, query optimization, relations modeling, and database operations.
rand/cc-polymath
Automatically discover database skills when working with SQL, PostgreSQL, MongoDB, Redis, database schema design, query optimization, migrations, connection pooling, ORMs, or database selection.
affaan-m/ECC
Prisma ORM patterns for TypeScript backends — schema design, query optimization, transactions, pagination, and critical traps like updateMany returning count not records, $transaction timeouts…
georgeguimaraes/elixir-agent-tools
Writes and refactors idiomatic Elixir modules and functions, with rules for pattern matching, error handling, protocols and when a process is really needed.
georgeguimaraes/elixir-agent-tools
Guidance for building and debugging durable background jobs in Elixir with Oban and Oban Pro, covering serialization, retries, uniqueness, chaining, chunking and workflows.
georgeguimaraes/elixir-agent-tools
Guides choices among GenServer, Supervisor, Task, Registry, ETS and Broadway when designing or debugging Elixir concurrency, state and fault recovery.
georgeguimaraes/elixir-agent-tools
Guidance for building and debugging Phoenix web interfaces: where LiveView loads data, scopes, PubSub topics, external polling and component state.
Works with
Categories
Designs and debugs Elixir persistence with Ecto: schemas, changesets, queries, preloads, migrations and multi-tenancy, kept within application contexts. The skill starts from the idea that a context changes what words mean, so each bounded context may have its own Product schema and table. Design goes top-down from subdomain to context to entity, cross-context references use IDs rather than associations, and queries go through the context.
Ecto Persistence Patterns fits situations like: designing Ecto schemas and changesets for a new feature; choosing between preloads and joins when loading associations; adding tenant scoping to queries in a multi-tenant Elixir app; deciding how contexts should reference each other.
Run `npx skills add georgeguimaraes/elixir-agent-tools --skill ecto -a claude-code`. Or copy the skill folder (plugins/elixir-dev/skills/ecto in georgeguimaraes/elixir-agent-tools) into .claude/skills/ecto in your project. Claude Code loads it when a task matches its description.
Run `npx skills add georgeguimaraes/elixir-agent-tools --skill ecto -a codex`. Or copy the skill folder (plugins/elixir-dev/skills/ecto in georgeguimaraes/elixir-agent-tools) into .agents/skills/ecto in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add georgeguimaraes/elixir-agent-tools --skill ecto -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/ecto, .gemini/skills/ecto, .github/skills/ecto and .opencode/skills/ecto in your project.
SKILL.md names no scripts, command-line tools or credentials: Ecto Persistence Patterns is instructions for the agent only.
SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.
Ecto Persistence Patterns is published under the Apache-2.0 licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 1.2k tokens (SKILL.md is roughly 4.7k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with Ecto Persistence Patterns: Dsql (awslabs/agent-plugins, 915 stars), DB Sculptor (EliasOulkadi/shokunin, 114 stars), Jpa Patterns (affaan-m/ECC, 276k stars) and Prisma Expert (davila7/claude-code-templates, 32k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
georgeguimaraes (a GitHub user) maintains it in georgeguimaraes/elixir-agent-tools, which has 184 GitHub stars. The repository holds 5 skills in this directory. The repository was last updated on September 20, 2026.
Source: georgeguimaraes/elixir-agent-tools on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.