Env Manager
bobmatnyc/claude-mpm
Environment variable validation, security scanning, and management for Next.js, Vite, React, and Node.js applications
Answer questions about ArkEnv and help implement environment variable validation.
$ npx skills add yamcodes/arkenv --skill arkenv -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install yamcodes/arkenv arkenv --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/yamcodes/arkenv.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/arkenv .claude/skills/arkenv && 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 "arkenv" agent skill from https://github.com/yamcodes/arkenv/tree/v1/skills/arkenv into .claude/skills/arkenv/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "arkenv", 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/yamcodes/arkenv/tree/v1/skills/arkenvType 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 yamcodes/arkenv --skill arkenv -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install yamcodes/arkenv arkenv --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/yamcodes/arkenv.git skills-src && mkdir -p .agents/skills && cp -r skills-src/skills/arkenv .agents/skills/arkenv && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "arkenv" agent skill from https://github.com/yamcodes/arkenv/tree/v1/skills/arkenv into .agents/skills/arkenv/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "arkenv", 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 yamcodes/arkenv --skill arkenv -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install yamcodes/arkenv arkenv --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/yamcodes/arkenv.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/skills/arkenv .cursor/skills/arkenv && 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 "arkenv" agent skill from https://github.com/yamcodes/arkenv/tree/v1/skills/arkenv into .cursor/skills/arkenv/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "arkenv", 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/yamcodes/arkenv.git --path skills/arkenv--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 yamcodes/arkenv --skill arkenv -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install yamcodes/arkenv arkenv --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/yamcodes/arkenv.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/skills/arkenv .gemini/skills/arkenv && 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 "arkenv" agent skill from https://github.com/yamcodes/arkenv/tree/v1/skills/arkenv into .gemini/skills/arkenv/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "arkenv", 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 yamcodes/arkenv arkenvInstalls 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 yamcodes/arkenv --skill arkenv -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/yamcodes/arkenv.git skills-src && mkdir -p .github/skills && cp -r skills-src/skills/arkenv .github/skills/arkenv && 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 "arkenv" agent skill from https://github.com/yamcodes/arkenv/tree/v1/skills/arkenv into .github/skills/arkenv/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "arkenv", 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 yamcodes/arkenv --skill arkenv -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install yamcodes/arkenv arkenv --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/yamcodes/arkenv.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/skills/arkenv .opencode/skills/arkenv && 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 "arkenv" agent skill from https://github.com/yamcodes/arkenv/tree/v1/skills/arkenv into .opencode/skills/arkenv/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "arkenv", 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.
arkenvAnswer questions about ArkEnv and help implement environment variable validation.
Arkenv is an agent skill from yamcodes/arkenv. Answer questions about ArkEnv and help implement environment variable validation. Use when developers: (1) Ask about environment variable validation or typesafety, (2) Want to setup ArkEnv in a project, (3) Need to define or update schemas using ArkType or Standard Schema, (4) Are integrating with Next.js, Nuxt, Vite, Bun, or Node.js runtimes. Triggers on: 'ArkEnv', 'env validation', 'typesafe env', 'createEnv', 'env.ts', 'arkenv'.
Its SKILL.md is about 2.5k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.
It sits in DevOps & Cloud, covering Secrets management and Forms and validation. It works with Vite, Next.js, Nuxt and Node.js. The repository describes itself as: ⛯ Typesafe environment variables with ArkType, Zod, or Valibot. The licence is MIT.
2 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit 74b3732. 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:
pnpmnpxFrom the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md. Its commands use pnpm and npx, which can reach the network depending on how they are called.
From URLs in SKILL.md, links to its own repository left out.
Names these keys or tokens, usually read from environment variables:
API_SECRET_KEYFrom names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Arkenv loads about 2.5k tokens when it runs. Until then it costs about 111 tokens; SKILL.md has 837 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 yamcodes/arkenv at commit 74b3732, republished under its MIT licence (© yamcodes). 837 words, ~2,470 tokens.
.claude/skills/arkenv/SKILL.md (or your agent's skills folder).ArkEnv is a typesafe environment variable validation library for modern JavaScript and TypeScript frameworks. It provides a single canonical surface across all frameworks: import { env } from "./env".
In v1, ArkEnv offers two first-class validation engines:
@arkenv/core: Built-in ArkType DSL engine for high-performance schema definition and automatic coercion.@arkenv/standard: Standard Schema engine supporting any compliant validator (Zod, Valibot, etc.).@arkenv/core ArkType DSL strings or @arkenv/standard with Zod / Valibot.string.numeric, number.port, booleans, JSON objects, arrays) and default values ("boolean = true").env directly across frontend and backend code.@arkenv/vite-plugin): Plugin operates in transform mode, rewriting imports from env.ts in the client graph to inline public VITE_* literals and replacing private server keys with throwing runtime guards.@arkenv/bun-plugin): Plugin intercepts env.ts imports in Bun.build / Bun.serve to inline public BUN_PUBLIC_* values while guarding server secrets.@arkenv/nextjs): Build-time and runtime validation with automatic client/server isolation proxy.@arkenv/nuxt): Nuxt module with Nitro boot validation and runtime proxy guard.@arkenv/core or @arkenv/standard.pnpm dlx arkenv init (or npx arkenv init).Next.js, Nuxt, Vite, Bun, etc.) and scaffold env.ts.--preset, -P <provider>).tsconfig.json when needed. Schema discovery for CLI commands uses --schema or flat convention paths (env.ts, src/env.ts) — not a package.json "arkenv" field, and not leftover split-layout filenames such as env/server.ts.ArkEnv is code-first. You can select a hosting provider preset during initial project setup (--preset vercel, netlify, cloudflare, railway, render, fly) or copy-paste provider fields directly into ./env.ts from the documentation (/docs/core-concepts/hosting-presets). There are no machine-managed comment blocks or CLI mutation commands.
AI agents SHOULD always use the CLI for project initialization to ensure consistency and reliability. Use the --agent flag for a fully automated, machine-readable experience.
pnpm dlx arkenv init --agent--agent flag automatically enables the following behaviors:--yes: Bypasses all interactive prompts and uses recommended defaults.--quiet: Suppresses spinners and ANSI formatting for cleaner terminal logs.--json: Emits a structured JSON summary to stdout upon completion (all other output is sent to stderr).stdout. Success is ok: true with commandId: "init"; details (e.g. scaffolded paths) live under result.ok: false)--agent never implies --force. When a safety check trips, the CLI refuses and emits an errored settlement envelope to stdout:
{
"ok": false,
"commandId": "init",
"error": {
"code": "CLI.GIT_TREE_DIRTY",
"severity": "error",
"summary": "Git working tree is not clean.",
"why": "Commit or stash your changes before running arkenv init.",
"nextActions": [
{
"kind": "run-command",
"label": "Re-run with --force to bypass git working tree check",
"command": "arkenv init --force"
}
]
},
"diagnostics": [],
"nextActions": [
{
"kind": "run-command",
"label": "Re-run with --force to bypass git working tree check",
"command": "arkenv init --force"
}
]
}error.code: a stable dotted identifier you can branch on (CLI.REQUIREMENTS_NOT_MET, CLI.GIT_TREE_DIRTY, CLI.NON_EMPTY_DIR, …). CLI.INTERNAL_ERROR means the CLI broke rather than refused — retrying with flags will not help.nextActions: remediation steps. A run-command action that includes --force means the refusal is bypassable; empty nextActions means it is not.Escalation pattern: always run init --agent without --force first. If you get ok: false, inspect error.code and nextActions. Only re-run with --force (or the command from a run-command action) once you have deliberately decided the refusal is safe to bypass — do not add --force pre-emptively.
initSet up ArkEnv in your project. It detects your framework and configures the appropriate plugin and schema.
pnpm dlx arkenv init [options]--preset, -P <preset>: Specify hosting provider preset (none, vercel, netlify, cloudflare, railway, render, fly).--no-codegen: Disable Next.js codegen configuration setup.--force, -f: Bypass clean git working tree safety check.checkValidate the environment against your schema file.
pnpm arkenv check [options]--schema, -s <path>: Explicit path to the schema module (overrides convention discovery).--verify-example [file]: Verify that all declared schema keys are present in .env.example (or a custom example file path) without mutating files.--env-file <path>: Specify one or more custom environment files to load.--json: Output structured JSON diagnostics to stdout.env@arkenv/core (ArkType DSL)import arkenv from "@arkenv/core";
export const env = arkenv({
PORT: "number.port = 3000",
DATABASE_URL: "string",
VITE_API_URL: "string",
NODE_ENV: "'development' | 'production' | 'test' = 'development'",
});@arkenv/standard (Standard Schema: Zod, Valibot)import arkenv from "@arkenv/standard";
import * as z from "zod";
export const env = arkenv({
PORT: z.number().default(3000),
DATABASE_URL: z.string(),
VITE_API_URL: z.url(),
NODE_ENV: z.enum(["development", "production", "test"]).default("development"),
});Valibot uses the /valibot subpath (install @valibot/to-json-schema as well):
import { arkenv } from "@arkenv/standard/valibot";
import * as v from "valibot";
export const env = arkenv({
PORT: v.optional(v.number(), 3000),
DATABASE_URL: v.pipe(v.string(), v.url()),
});env in Application CodeAlways import and read properties directly from the canonical env object:
import { env } from "./env";
export default function App() {
const apiUrl = env.VITE_API_URL; // string
return <div>API URL: {apiUrl}</div>;
}@arkenv/vite-plugin)Register the plugin in vite.config.ts without schema arguments:
import { defineConfig } from "vite";
import arkenvPlugin from "@arkenv/vite-plugin";
export default defineConfig({
plugins: [arkenvPlugin()],
});If you need environment variables inside vite.config.ts itself (e.g. server.port), validate them with loadEnv:
import { defineConfig, loadEnv } from "vite";
import arkenvPlugin from "@arkenv/vite-plugin";
import arkenv, { type } from "@arkenv/core";
export const Env = type({
PORT: "number.port = 5173",
VITE_API_URL: "string",
});
export default defineConfig(({ mode }) => {
const env = arkenv(Env, { env: loadEnv(mode, process.cwd(), "") });
return {
plugins: [arkenvPlugin()],
server: { port: env.PORT },
};
});@arkenv/bun-plugin)In bunfig.toml:
[serve.static]
plugins = ["@arkenv/bun-plugin"]In Bun.build:
import arkenvPlugin from "@arkenv/bun-plugin";
await Bun.build({
entrypoints: ["./src/index.tsx"],
outdir: "./dist",
plugins: [arkenvPlugin],
});src/env.ts contains all keys. Server graph runs full validation at boot; client graph receives inlined public literals while access to private server keys throws a runtime error.extends: [clientEnv]. Next can use import "server-only" + @arkenv/core for the server module. Nuxt: never import the server module from client code. Not a CLI --strict flag or package /client /server surface.import { env } from "./env": Never use import.meta.env or process.env directly for application environment variables in v1..d.ts augmentations: ImportMetaEnvAugmented and ProcessEnvAugmented are legacy v0 patterns dropped in v1.DATABASE_URL, API_SECRET_KEY) with client prefixes (VITE_, NEXT_PUBLIC_, BUN_PUBLIC_, NUXT_PUBLIC_).© yamcodes, MIT. 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 skills/arkenv of yamcodes/arkenv.
Open the folder on GitHubat commit 74b3732
Arkenv 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 |
|---|---|---|---|---|---|---|
| Arkenv this skillyamcodes/arkenv | 145 | — | ~2.5k | Automated safety check: Pass | MIT | |
| Env Managerbobmatnyc/claude-mpm | 155 | — | ~3.9k | Automated safety check: Notes | Custom licence | |
| Nuxt Contentsecondsky/claude-skills | 227 | — | ~4.3k | Automated safety check: Pass | MIT | |
| Nestjs ConfigurationHoangNguyen0403/agent-skills-standard | 571 | — | ~591 | Automated safety check: Notes | MIT | |
| Tanstack RouterMindrally/skills | 268 | — | ~1.9k | Automated safety check: Pass | Apache-2.0 | |
| Domscribepatchorbit/domscribe | 193 | — | ~3.3k | Automated safety check: Notes | MIT |
bobmatnyc/claude-mpm
Environment variable validation, security scanning, and management for Next.js, Vite, React, and Node.js applications
secondsky/claude-skills
Nuxt Content v3 Git-based CMS for Markdown/MDC content sites.
HoangNguyen0403/agent-skills-standard
Environment variables validation and ConfigModule setup. An agent skill from HoangNguyen0403/agent-skills-standard.
Mindrally/skills
Type-safe, file-based routing for React with TanStack Router.
patchorbit/domscribe
Work with Domscribe — the pixel-to-code bridge. An agent skill from patchorbit/domscribe.
waynesutton/markdown-site
Integrate Convex static self hosting into existing apps using the latest upstream instructions from get-convex/self-hosting every time.
yamcodes/arkenv
Anti-AI-slop design skill for greenfield pages, audits, redesigns, and design extraction from URLs or screenshots.
yamcodes/arkenv
Bulletproof React architecture patterns for scalable, maintainable applications.
yamcodes/arkenv
Fetch, analyze, and address code reviews and comments on GitHub, or perform a code review on changes in the workspace.
yamcodes/arkenv
Manually forward-ports merged dev (v0) changes to the v1 branch, adapting code to v1's package layout and changeset names.
yamcodes/arkenv
Groom a poorly written issue by grilling the user to clarify requirements, updating the issue on GitHub via the gh cli, and utilizing the triage skill to apply the correct label and add an agent…
yamcodes/arkenv
Move newly installed skills from '.agents/skills/' to the project's root 'skills/' directory, with options to rename and attribute them, and mark them as internal.
Categories
Answer questions about ArkEnv and help implement environment variable validation. Arkenv is an agent skill from yamcodes/arkenv. Answer questions about ArkEnv and help implement environment variable validation.
Arkenv fits situations like: ask about environment variable validation; want to setup ArkEnv in a project; update schemas using ArkType; standard Schema.
Run `npx skills add yamcodes/arkenv --skill arkenv -a claude-code`. Or copy the skill folder (skills/arkenv in yamcodes/arkenv) into .claude/skills/arkenv in your project. Claude Code loads it when a task matches its description.
Run `npx skills add yamcodes/arkenv --skill arkenv -a codex`. Or copy the skill folder (skills/arkenv in yamcodes/arkenv) into .agents/skills/arkenv 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 yamcodes/arkenv --skill arkenv -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/arkenv, .gemini/skills/arkenv, .github/skills/arkenv and .opencode/skills/arkenv in your project.
Going by SKILL.md and its folder, Arkenv needs the command-line tools its instructions call (pnpm and npx) and credentials named API_SECRET_KEY. Our summary lists: Node.js; A credential in API_SECRET_KEY.
SKILL.md contains no URLs. Its commands use npx, which can reach the network depending on how they are called. 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.
Arkenv is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 2.5k tokens (SKILL.md is roughly 9.9k 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 Arkenv: Env Manager (bobmatnyc/claude-mpm, 155 stars), Nuxt Content (secondsky/claude-skills, 227 stars), Nestjs Configuration (HoangNguyen0403/agent-skills-standard, 571 stars) and Tanstack Router (Mindrally/skills, 268 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
yamcodes (a GitHub user) maintains it in yamcodes/arkenv, which has 145 GitHub stars. The repository holds 20 skills in this directory. The repository was last updated on October 8, 2026.
Source: yamcodes/arkenv on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.