Curated library of 38 atomic skills, 7 personas, and 1 orchestrator for Elixir and Phoenix development. Organized by category: fundamentals, phoenix, database, testing, auth, infrastructure, quality, security, integrations, tooling, frameworks, personas, and orchestration. Covers core Elixir patterns, Phoenix LiveView, Ecto, OTP, Oban, testing, security, deployment, real-time, and modern tooling (Req, Swoosh, Cachex, Broadway, Ash).
91
91%
Does it follow best practices?
Impact
91%
1.37xAverage score across 56 eval scenarios
Advisory
Suggest reviewing before use
{
"context": "Tests whether the agent applies OTP best practices when building a GenServer-backed rate limiter: using ETS for concurrent reads while the GenServer handles writes, exposing a public API, keeping init/1 fast with handle_continue, annotating callbacks with @impl true, using Registry for process naming, and writing structured log calls.",
"type": "weighted_checklist",
"checklist": [
{
"name": "ETS table created",
"description": "A named ETS table is created (e.g. :ets.new/2) somewhere in the rate limiter module — not relying solely on GenServer state for storage",
"max_score": 12
},
{
"name": "Reads bypass GenServer",
"description": "At least one public read function (e.g. check_limit/1, allowed?/2) calls :ets.lookup or :ets.match directly rather than routing through GenServer.call",
"max_score": 12
},
{
"name": "GenServer owns writes",
"description": "Counter increment or window-reset operations go through the GenServer (via handle_call or handle_cast), not direct :ets.update_counter calls from the public API",
"max_score": 8
},
{
"name": "Public API functions",
"description": "All public entry points are named functions in the module (e.g. start_link/1, check_limit/1, increment/1) — callers are never expected to use GenServer.call/cast directly",
"max_score": 10
},
{
"name": "No direct GenServer.call in public API",
"description": "The module does NOT expose raw GenServer.call(pid, ...) or GenServer.cast(pid, ...) calls in its public interface — all calls are wrapped",
"max_score": 8
},
{
"name": "@impl true on callbacks",
"description": "Every GenServer callback (init/1, handle_call/3, handle_cast/3, handle_continue/2, handle_info/2, and/or terminate/2) is preceded by @impl true",
"max_score": 10
},
{
"name": "Fast init with handle_continue",
"description": "init/1 returns quickly (e.g. {:ok, state} or {:ok, state, {:continue, :setup}}) without performing any blocking work; expensive setup (e.g. loading data, initialising ETS) is deferred to handle_continue/2",
"max_score": 10
},
{
"name": "Registry-based naming",
"description": "Processes are registered using Registry (e.g. via {:via, Registry, {MyApp.Registry, key}}) rather than plain atoms passed to name: in start_link",
"max_score": 12
},
{
"name": "Structured logging",
"description": "All Logger calls use keyword-list metadata (e.g. Logger.info(\"rate_limit_exceeded\", tenant_id: id, count: n)) — no string interpolation inside the log message string",
"max_score": 10
},
{
"name": "Design doc explains ETS rationale",
"description": "IMPLEMENTATION.md explicitly states why ETS is used for reads (e.g. concurrent access, avoid bottleneck, bypass GenServer serialisation) rather than just describing what was built",
"max_score": 8
}
]
}.tessl-plugin
evals
scenario-1
scenario-2
scenario-3
scenario-4
scenario-5
scenario-6
scenario-7
scenario-8
scenario-9
scenario-10
scenario-11
scenario-12
scenario-13
scenario-14
scenario-15
scenario-16
scenario-17
scenario-18
scenario-19
scenario-20
scenario-21
scenario-22
scenario-23
scenario-24
scenario-25
scenario-26
scenario-27
scenario-28
scenario-29
scenario-30
scenario-31
scenario-32
scenario-33
scenario-34
scenario-35
scenario-36
scenario-37
scenario-38
scenario-39
scenario-40
scenario-41
scenario-42
scenario-43
scenario-44
scenario-45
scenario-46
scenario-47
scenario-48
scenario-49
scenario-50
scenario-51
scenario-52
scenario-53
scenario-54
scenario-55
scenario-56
skills
frameworks
ash-framework
infrastructure
orchestration
elixir-skill-router
personas
phoenix
quality
security
security-essentials
tooling
mix-tasks-generators