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 correctly adds a Cachex caching layer to a Phoenix Accounts context, using the atomic fetch pattern, explicit TTLs, stats configuration, supervisor ownership, structured logging, and the `with` construct for sequential fallible operations.",
"type": "weighted_checklist",
"checklist": [
{
"name": "Cachex.fetch/3 used",
"description": "Uses Cachex.fetch/3 for the cache-aside lookup in get_user — NOT a separate Cachex.get + Cachex.put pair",
"max_score": 20
},
{
"name": "TTL set on cache entry",
"description": "Every Cachex.fetch/3 commit (or any Cachex.put call) explicitly sets a TTL — no entry is cached without one",
"max_score": 15
},
{
"name": "stats: true in config",
"description": "The Cachex child spec includes `stats: true` (or equivalent option) so hit/miss metrics can be collected",
"max_score": 15
},
{
"name": "Cachex in supervision tree",
"description": "Cachex is started as a supervised child in application.ex (or a dedicated supervisor), NOT started ad-hoc via Cachex.start_link outside a supervisor",
"max_score": 10
},
{
"name": "Cache invalidation on update",
"description": "update_user/2 (or equivalent) calls Cachex.del/2 (or Cachex.put with updated value) to remove or refresh the stale cache entry after a successful update",
"max_score": 10
},
{
"name": "Structured logging",
"description": "Logger calls use keyword-list metadata — e.g. Logger.info(\"...\", user_id: id) — NOT string interpolation like Logger.info(\"user #{id} ...\")",
"max_score": 10
},
{
"name": "with for sequential operations",
"description": "When 2 or more sequential fallible operations are chained (e.g. cache miss then DB fetch, or validate then update), a `with` expression is used instead of nested case statements",
"max_score": 10
},
{
"name": "cachex dep in mix.exs",
"description": "The Cachex package (`:cachex`) is present in the deps list in mix.exs",
"max_score": 5
},
{
"name": "DESIGN.md present",
"description": "A DESIGN.md file exists and contains an explanation of the TTL value chosen and how to read or access cache stats",
"max_score": 5
}
]
}.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