Effect TS
pproenca/dot-skills
Effect-TS library usage in TypeScript — Effect.gen generators, Schema.Struct/Schema.Class definitions, Layer/Context.Tag/Service patterns, Effect.pipe pipelines, Data.TaggedError/Data.Class error…
Guides adding a new built-in enricher to the evlog package, covering the source, tests, docs, README, a related skill and a changeset.
$ npx skills add evloghq/evlog --skill create-evlog-enricher -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install evloghq/evlog create-evlog-enricher --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/evloghq/evlog.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.agents/skills/create-enricher .claude/skills/create-evlog-enricher && 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 "create-evlog-enricher" agent skill from https://github.com/evloghq/evlog/tree/main/.agents/skills/create-enricher into .claude/skills/create-evlog-enricher/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "create-evlog-enricher", 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/evloghq/evlog/tree/main/.agents/skills/create-enricherType 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 evloghq/evlog --skill create-evlog-enricher -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install evloghq/evlog create-evlog-enricher --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/evloghq/evlog.git skills-src && mkdir -p .agents/skills && cp -r skills-src/.agents/skills/create-enricher .agents/skills/create-evlog-enricher && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "create-evlog-enricher" agent skill from https://github.com/evloghq/evlog/tree/main/.agents/skills/create-enricher into .agents/skills/create-evlog-enricher/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "create-evlog-enricher", 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 evloghq/evlog --skill create-evlog-enricher -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install evloghq/evlog create-evlog-enricher --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/evloghq/evlog.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/.agents/skills/create-enricher .cursor/skills/create-evlog-enricher && 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 "create-evlog-enricher" agent skill from https://github.com/evloghq/evlog/tree/main/.agents/skills/create-enricher into .cursor/skills/create-evlog-enricher/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "create-evlog-enricher", 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/evloghq/evlog.git --path .agents/skills/create-enricher--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 evloghq/evlog --skill create-evlog-enricher -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install evloghq/evlog create-evlog-enricher --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/evloghq/evlog.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/.agents/skills/create-enricher .gemini/skills/create-evlog-enricher && 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 "create-evlog-enricher" agent skill from https://github.com/evloghq/evlog/tree/main/.agents/skills/create-enricher into .gemini/skills/create-evlog-enricher/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "create-evlog-enricher", 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 evloghq/evlog create-evlog-enricherInstalls 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 evloghq/evlog --skill create-evlog-enricher -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/evloghq/evlog.git skills-src && mkdir -p .github/skills && cp -r skills-src/.agents/skills/create-enricher .github/skills/create-evlog-enricher && 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 "create-evlog-enricher" agent skill from https://github.com/evloghq/evlog/tree/main/.agents/skills/create-enricher into .github/skills/create-evlog-enricher/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "create-evlog-enricher", 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 evloghq/evlog --skill create-evlog-enricher -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install evloghq/evlog create-evlog-enricher --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/evloghq/evlog.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/.agents/skills/create-enricher .opencode/skills/create-evlog-enricher && 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 "create-evlog-enricher" agent skill from https://github.com/evloghq/evlog/tree/main/.agents/skills/create-enricher into .opencode/skills/create-evlog-enricher/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "create-evlog-enricher", 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.
create-evlog-enricherGuides adding a new built-in enricher to the evlog package, covering the source, tests, docs, README, a related skill and a changeset.
This skill walks the agent through adding a built-in enricher to evlog, which attaches derived context to wide events. Each enricher is a single defineEnricher call from evlog/toolkit, so community enrichers have the same shape as built-in ones. A checklist of seven touchpoints must all be done before the task counts as complete: the source file, a decision on the default composition, tests, the docs page, the review-logging-patterns skill, the package README and a minor changeset.
It also settles whether the enricher should join createDefaultEnrichers(), which should happen only if it is universally applicable and reads nothing but the request, since changing the default is a behavior change that the changeset must call out. Naming conventions give camelCase, PascalCase and display-name forms, the PR title uses a conventional-commit style with the core scope, and a template file in references/ provides an annotated enricher skeleton.
6 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit 54dcc50. 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.
Shell commands in SKILL.md call:
pnpmFrom the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md. Its commands use pnpm, which can reach the network depending on how they are called.
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.
evlog Enricher Creator loads about 1.7k tokens when it runs, and up to ~2.6k if it reads all its reference files. Until then it costs about 67 tokens; SKILL.md has 702 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 evloghq/evlog at commit 54dcc50, republished under its MIT licence (© evloghq). 702 words, ~1,671 tokens.
.claude/skills/create-evlog-enricher/SKILL.md (or your agent's skills folder). This skill also uses 1 other file; get the full folder from GitHub.Add a new built-in enricher to evlog. Every enricher is built on the public toolkit primitive defineEnricher from evlog/toolkit, so a community enricher has the same shape as a built-in one.
feat(core): add the {name} enricherEnrichers live in the core package surface (evlog/enrichers), so use the core scope unless a dedicated scope exists.
| # | File | Action |
|---|---|---|
| 1 | packages/evlog/src/enrichers/index.ts | Add enricher source (one defineEnricher call) |
| 2 | Same file: createDefaultEnrichers() | Decide whether the enricher belongs in the default composition (see below) |
| 3 | packages/evlog/test/toolkit/enrichers.test.ts | Add tests (one describe block per enricher) |
| 4 | apps/docs/content/5.use-cases/5.enrichers.md | Add a section for the enricher + update the import list and, if applicable, the "All built-in enrichers" default composition text |
| 5 | skills/review-logging-patterns/SKILL.md | Add the enricher to the Built-in: line in the Enrichers section |
| 6 | packages/evlog/README.md | Add the enricher to the Built-in Enrichers section (root README.md is a symlink to it) |
| 7 | .changeset/{name}-enricher.md | Create changeset (minor) |
Important: Do NOT consider the task complete until all 7 touchpoints have been addressed.
createDefaultEnrichers()?createDefaultEnrichers() composes user agent, geo, request size, and trace context via composeEnrichers (from ../shared/compose). Add the new enricher to the composition only if it is universally applicable and reads nothing but the request (headers/env). Anything requiring service-specific setup or extra cost stays opt-in. Changing the default composition is a behavior change for every existing createDefaultEnrichers() user: call it out explicitly in the changeset.
| Placeholder | Example (UserAgent) | Usage |
|---|---|---|
{name} | userAgent | camelCase for event field key |
{Name} | UserAgent | PascalCase in function/interface names |
{DISPLAY} | User Agent | Human-readable display name |
defineEnricherAdd the enricher to packages/evlog/src/enrichers/index.ts. Read references/enricher-template.md for the full annotated template.
The contract is defineEnricher<T>({ name, field, compute }, options?). You only ship one piece of logic:
compute(ctx): return the computed value (typed as T) or undefined to skip.defineEnricher handles the rest:
mergeEventField (respecting options.overwrite, default false)compute returns undefinedKey rules:
getHeader() for case-insensitive header lookup, normalizeNumber() for numeric strings. Both from ../shared/headers (re-exported by evlog/toolkit).ctx.event. If the enricher must additionally pin top-level fields (like createTraceContextEnricher does for event.traceId / event.parentSpanId), wrap the defineEnricher result in a closure, see that enricher for the pattern.create{Name}Enricher(options: EnricherOptions = {}) returns the result of defineEnricher(...), directly in the normal case, or through the thin closure wrapper when the enricher also pins top-level fields (see the single-event-field rule above).defineEnricher's built-in error handling if something goes wrong.{Name}Info describing the field shape, exported alongside the factory.Add tests to packages/evlog/test/toolkit/enrichers.test.ts, following the existing structure (one describe block per enricher) and packages/evlog/test/README.md conventions.
Required test categories:
ctx.request, ctx.response, process.env, ctx.event, or headers)overwrite: false (default) doesn't replace user-provided fieldsoverwrite: true replaces existing fieldscreateDefaultEnrichers(), extend that composition's testsEdit apps/docs/content/5.use-cases/5.enrichers.md:
## {DISPLAY} section following the structure of the existing ones:## {DISPLAY}
[One-sentence description of what the enricher does.]
**Sets:** `event.{name}`
\`\`\`typescript
const enrich = create{Name}Enricher()
\`\`\`
**Output shape:**
\`\`\`typescript
interface {Name}Info {
// fields
}
\`\`\`
**Example output:**
\`\`\`json
{
"{name}": {
// example values
}
}
\`\`\`createDefaultEnrichers() composes.Custom-enricher authoring docs live separately at apps/docs/content/6.extend/5.custom-enrichers.md, with no change needed there unless the toolkit contract itself changed.
In skills/review-logging-patterns/SKILL.md (published on evlog.dev), find the Enrichers section and add the new enricher to the Built-in: line.
Add the enricher to the Built-in Enrichers section in packages/evlog/README.md (the root README.md is a symlink to it).
Create .changeset/{name}-enricher.md with a minor bump describing what the enricher sets and when to use it. Mention explicitly if the default composition changed.
cd packages/evlog
pnpm run lint
pnpm run typecheck
pnpm run test
pnpm run build© evloghq, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
SKILL.md and 1 other file (references) in .agents/skills/create-enricher of evloghq/evlog.
Open the folder on GitHubat commit 54dcc50
evlog Enricher Creator 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 |
|---|---|---|---|---|---|---|
| evlog Enricher Creator this skillevloghq/evlog | 1.9k | — | ~1.7k | Automated safety check: Pass | MIT | |
| Effect TSpproenca/dot-skills | 215 | — | ~2k | Automated safety check: Pass | MIT | |
| Add Packageremix-run/remix | 33k | — | ~2k | Automated safety check: Pass | MIT | |
| ScratchpadEffect-TS/effect-smol | 782 | — | ~459 | Automated safety check: Pass | MIT | |
| Effect TSmattiacerutti/supernova | 186 | — | ~2.8k | Automated safety check: Pass | MIT | |
| Enforce Rules For Typescriptmoeru-ai/airi | 50k | — | ~3.4k | Automated safety check: Pass | MIT |
pproenca/dot-skills
Effect-TS library usage in TypeScript — Effect.gen generators, Schema.Struct/Schema.Class definitions, Layer/Context.Tag/Service patterns, Effect.pipe pipelines, Data.TaggedError/Data.Class error…
remix-run/remix
Create or align a package in the Remix monorepo to match existing package conventions.
Effect-TS/effect-smol
Extract the JSDoc example nearest the active source selection or cursor into ./scratchpad as a TypeScript file.
mattiacerutti/supernova
Write idiomatic Effect v4 TypeScript following official best practices from effect-solutions and the Effect source.
moeru-ai/airi
Enforce AIRI's TypeScript and Vue source rules for imports, naming, comments, JSDoc, fallbacks, stateful and protocol code, and module design.
backpine/effect-worker-mono
Write, insert, or update Effect public API JSDoc so it satisfies the standard-jsdoc oxlint rule.
evloghq/evlog
Walks through adding a new built-in evlog drain adapter for an observability platform: source, build config, exports, tests, docs and PR scope.
evloghq/evlog
Walks a contributor through adding a new HTTP framework integration to the evlog logging package: middleware source, build entry, exports, tests, example app and docs.
evloghq/evlog
Walks through adding a new rule or framework adapter to `evlog map` in @evlog/cli, from the rule source and registry to types, tests, docs and the published skill.
evloghq/evlog
Rules for writing and reviewing evlog docs, blog posts, READMEs, skills and AGENTS.md files, with separate review and rewrite roles, a house voice and a catalog of AI-sounding tells.
evloghq/evlog
Produce a before/after visual comparison of an evlog surface (landing, docs, telemetry, playgrounds) and share it as public Blob URLs.
evloghq/evlog
Runs the daily review of evlog's written material: picks the worst-scoring files in one group, rewrites what holds up, and opens a single pull request that reports the changes.
Works with
Categories
Guides adding a new built-in enricher to the evlog package, covering the source, tests, docs, README, a related skill and a changeset. This skill walks the agent through adding a built-in enricher to evlog, which attaches derived context to wide events. Each enricher is a single defineEnricher call from evlog/toolkit, so community enrichers have the same shape as built-in ones.
evlog Enricher Creator fits situations like: adding a new enricher such as deployment metadata or tenant context to evlog; writing tests for a new evlog enricher; updating evlog docs and README for a new enricher; deciding whether an enricher belongs in the default set.
Run `npx skills add evloghq/evlog --skill create-evlog-enricher -a claude-code`. Or copy the skill folder (.agents/skills/create-enricher in evloghq/evlog) into .claude/skills/create-evlog-enricher in your project. Claude Code loads it when a task matches its description.
Run `npx skills add evloghq/evlog --skill create-evlog-enricher -a codex`. Or copy the skill folder (.agents/skills/create-enricher in evloghq/evlog) into .agents/skills/create-evlog-enricher 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 evloghq/evlog --skill create-evlog-enricher -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/create-evlog-enricher, .gemini/skills/create-evlog-enricher, .github/skills/create-evlog-enricher and .opencode/skills/create-evlog-enricher in your project.
Going by SKILL.md and its folder, evlog Enricher Creator needs the command-line tools its instructions call (pnpm). Our summary lists: A checkout of the evlog repository.
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.
evlog Enricher Creator is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 1.7k tokens (SKILL.md is roughly 6.7k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full. Its references folder adds about 892 tokens, read only when the agent opens those files.
Skills that share tags, products or a category with evlog Enricher Creator: Effect TS (pproenca/dot-skills, 215 stars), Add Package (remix-run/remix, 33k stars), Scratchpad (Effect-TS/effect-smol, 782 stars) and Effect TS (mattiacerutti/supernova, 186 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
evloghq (a GitHub organization) maintains it in evloghq/evlog, which has 1,888 GitHub stars. The repository holds 20 skills in this directory. The repository was last updated on October 8, 2026.
Source: evloghq/evlog on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.