write-extension-local

write-extension-local is a skill for Claude Code, Codex from aayushmau5/eva. It costs 55 tokens per session (3,884 once invoked), scanned A, original, MIT.

Instructions for building an Eva extension that runs on the same computer as the coding session. It can be a single Elixir script or a Mix project, which is Elixir’s project and dependency tool.

In plain words
What is it for?
Creating, changing, or debugging local Eva extensions, including extensions that need their own libraries or several files.
Why use it?
It explains the packaging, location, startup, and callback rules needed for Eva to find and use a local extension.

Skill for Claude CodeCodex

Written for no agent in particular: nothing here depends on one. Also seen: mentions subagents.

Good fit Creating, changing, or debugging local Eva extensions, including extensions that need their own libraries or several files.

Compare 6 skills from other repositories ↓
Install with agentmods
npx agentmods add skills/aayushmau5/eva/write-extension-local
Install

Getting it into your agent

One page per mod, every tool's command on it. A separate URL per tool would split the same page into five that compete with each other.

Any agent
npx skills add aayushmau5/eva --skill write-extension-local
Clone the repo
git clone --depth 1 https://github.com/aayushmau5/eva

Made for: Claude Code, Codex.

Wrote this? Show the measurements

A badge with what this costs and how it scanned, read live from this page, so it follows the numbers instead of freezing them. Markdown for a README, HTML for a documentation site or a project page.

agentmods badge for write-extension-local

README.md
[![agentmods](https://agentmods.dev/badge/skills/aayushmau5/eva/write-extension-local.svg)](https://agentmods.dev/skills/aayushmau5/eva/write-extension-local)
Your own site
<a href="https://agentmods.dev/skills/aayushmau5/eva/write-extension-local"><img src="https://agentmods.dev/badge/skills/aayushmau5/eva/write-extension-local.svg" alt="Measured on agentmods" height="20"></a>
Per session 55 Skills are progressive disclosure: only the name and description are preloaded; the body loads when the skill is used.
When invoked 3,884 The whole file, excluding the scripts and references it only reads on demand.
Security scan A 0 findings. A grade says what 26 rules found in the file — not that it is safe. Third-party audits
  • NVIDIA SkillSpector pass 7 Sept 2026
How audits are shown
Origin original No closer match found in the catalogue.
Token cost

What it costs to keep this loaded

Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.

ModelPer sessionOnce invoked
Fable 5.1 $0.00055 $0.03884
Opus 5 $0.00028 $0.01942
Sonnet 5 $0.00011 $0.00777
Haiku 4.5 $0.00006 $0.00388

Measured 7d ago against content hash c17967fc1a08, method: parsed. Prices are Anthropic first-party input rates as of 2026-09-07, from the pricing page.

Security

Grade A, and why

write-extension-local scanned grade A with 0 findings against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured 7d ago.

A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.

Nothing flagged

None of the 26 patterns this scan looks for appear in this file: no shell pipes, no recursive deletes, no credential paths, no hidden text, no instruction-override or anti-refusal phrasing, no agent-config snooping. That is not a guarantee, it is the absence of the things that are checkable.

.eva/skills/write-extension-local/SKILL.md · 399 lines

How it starts

The opening of the file, as written. The whole thing — 399 lines — stays where its author put it; the contents beside it link to each section on GitHub.

Writing a local Eva extension

Two ways to ship one, both running on the same machine as the session:

script one .exs file Eva compiles it into its own VM at session start
project a Mix project its own BEAM node on this machine, which Eva finds and dials

Everything about the contract — setup/1, the %Spec{} fields, every callback, the API — is identical in both. A project only differs in packaging: it has its own mix.exs and dependencies, starts Eva.Core.Extension.Node from its application, and you start it yourself. Reach for a project when the extension needs libraries of its own, or when one file has stopped being enough. See Project extensions.

An extension that runs on another machine is also a project — see the write-extension-remote skill for what changes there.

Where it goes (scripts)

~/.eva/extensions/<name>.exs for every project, or <project>/.eva/extensions/<name>.exs for one. A directory works too, as <name>/extension.exs, when the extension needs sibling files. The filename is the extension's name — that name appears in diagnostics, namespaces its stored data, and is how its own tools look up its process. A project file shadows a global one of the same name.

Project extensions need approving. ~/.eva/extensions loads automatically — the user put it there. <project>/.eva/extensions does not: it is code from whoever wrote the repository, running before the first prompt, so Eva skips the whole directory and says so until the user approves it (Session.trust_extensions/1). Approval covers the directory's contents as they were, so editing or adding an extension asks again. A path passed explicitly with -e is always loaded — naming it is the consent.

The module name follows the filename. notes.exs must define Eva.Extension.Notes, and every other module in the file goes under it (Eva.Extension.Notes.Client). Module names are global on the BEAM, so this is what keeps two extensions from redefining each other's helpers; anything outside the namespace fails to compile, and a module under the wrong extension's namespace is refused at load.

Read the full file on GitHub · 399 lines

Changes

What this file has done since we first saw it

Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.

  1. 7d ago First seen · 399 lines · 55 tokens per session scan A c17967fc1a08

Subscribe to this mod's changes

write-extension-local is a skill published in the GitHub repository aayushmau5/eva (5 stars, last pushed yesterday), licensed MIT. It adds 55 tokens to every session and 3,884 once invoked, about $0.0003 per session on Opus 5. A static security scan graded it A with 0 findings. No closer match exists in the catalogue, so it is treated as the original; first seen 2026-08-31.

Related

Other skills, from other repositories

matlab

Build, review, migrate, and safely plan MATLAB or GNU Octave numerical workflows, including arrays, tabular/time data, tests, projects, graphics, MAT files, and explicit Python interoperability.

K-Dense-AI/scientific-agent-skills · 42 tokens

ast-grep

Guide for writing ast-grep rules to perform structural code search and analysis. Use when users need to search codebases using Abstract Syntax Tree (AST) patterns, find specific code structures, or perform complex code queries that go beyond simple text search. This skill should be used when users ask to search for…

JanDeDobbeleer/oh-my-posh · 80 tokens

platform-detection

Identify a .NET project's test platform, framework, command mode, and SDK-style vs classic project system. Use only for "which test platform/framework?", "VSTest or MTP?", or "what runner does this project use?", including bridge settings, UseVSTest opt-outs, and incompatible or conflicting VSTest/MTP configuration.…

dotnet/skills · 146 tokens

unity-version-split

Split a C# file into Unity 6.5+ and pre-Unity 6.5 variants. Use when a file needs different implementations for different Unity versions due to API changes (e.g., EntityId vs int, GetEntityId vs GetInstanceID).

IvanMurzak/Unity-MCP · 59 tokens

omh-rust

This is a Hermes-native rust workflow skill.

rlaope/oh-my-hermes · 69 tokens

axiom-concurrency

Use when writing ANY async code, actors, threads, or seeing ANY concurrency error. Covers Swift 6 concurrency, @MainActor, Sendable, data races, async/await patterns.

CharlesWiltgen/Axiom · 43 tokens