{"_id":"envsitter-guard","_rev":"4-15e2702ed627f70ed2c62edcf0e207da","name":"envsitter-guard","dist-tags":{"latest":"0.0.4"},"versions":{"0.0.1":{"name":"envsitter-guard","version":"0.0.1","license":"MIT","_id":"envsitter-guard@0.0.1","maintainers":[{"name":"boxpositron","email":"npm@boxpositron.dev"}],"dist":{"shasum":"8f8abd665939b86cc169756d52385acce0b1f217","tarball":"https://registry.npmjs.org/envsitter-guard/-/envsitter-guard-0.0.1.tgz","fileCount":7,"integrity":"sha512-iCJq3+qoHvupljD4CBQADAoWt/Lwls/9SXxe4vKls1A/Mm4PHpic5ufdr0u2buj0+HvN4AU3bID2tevjYnbg4A==","signatures":[{"sig":"MEQCID/HXvcoVkSxsHELveEs42UVHyZ54xh1Jrft/oulidvdAiB7BpHqE8LcMzjkBpkWvHBaouu1hj8KgysdrHvaK6GyOQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":15684},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"gitHead":"97598af472b0f3b3242da4410624ee7fea2e7f0a","scripts":{"test":"npm run build:test && node --test dist-test/test/*.test.js","build":"tsc -p tsconfig.build.json","prepack":"npm run build","typecheck":"tsc -p tsconfig.json","build:test":"tsc -p tsconfig.test.json","prepublishOnly":"npm run typecheck && npm test && npm run build"},"_npmUser":{"name":"boxpositron","email":"npm@boxpositron.dev"},"_npmVersion":"11.3.0","description":"OpenCode plugin that prevents agents/tools from reading or editing sensitive .env* files, while still allowing safe inspection via EnvSitter.","directories":{},"_nodeVersion":"22.14.0","dependencies":{"envsitter":"^0.0.1","@opencode-ai/plugin":"^1.1.14"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","typescript":"*","@types/node":"*"},"_npmOperationalInternal":{"tmp":"tmp/envsitter-guard_0.0.1_1768223070559_0.872330705114539","host":"s3://npm-registry-packages-npm-production"}},"0.0.2":{"name":"envsitter-guard","version":"0.0.2","license":"MIT","_id":"envsitter-guard@0.0.2","maintainers":[{"name":"boxpositron","email":"npm@boxpositron.dev"}],"dist":{"shasum":"7c21a0d86d9411bff4ed043f9fb35254ce7a4a54","tarball":"https://registry.npmjs.org/envsitter-guard/-/envsitter-guard-0.0.2.tgz","fileCount":7,"integrity":"sha512-Vlm+BSliDGfXxh/ncXUw6iXt10fUhFpc0YE8DEWKj4DQ3dJdDJepqU/twTxAnzEOfbuoUHQZOB0gYEm8Kxp9zg==","signatures":[{"sig":"MEUCIBS5aSpOhcCZTe35M1QgSQ+Ei595PLUpTy4xKqusH8r5AiEAz2wzbrjK+gvoBYD0K/Ai86XCyHOmB9wBKS79214JMw4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":34018},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"gitHead":"9c895288297ecd921249a8953605177d82a42822","scripts":{"test":"npm run build:test && node --test dist-test/test/*.test.js","build":"tsc -p tsconfig.build.json","prepack":"npm run build","typecheck":"tsc -p tsconfig.json","build:test":"tsc -p tsconfig.test.json","prepublishOnly":"npm run typecheck && npm test && npm run build"},"_npmUser":{"name":"boxpositron","email":"npm@boxpositron.dev"},"_npmVersion":"11.3.0","description":"OpenCode plugin that prevents agents/tools from reading or editing sensitive .env* files, while still allowing safe inspection via EnvSitter.","directories":{},"_nodeVersion":"22.14.0","dependencies":{"envsitter":"^0.0.2","@opencode-ai/plugin":"^1.1.14"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","typescript":"*","@types/node":"*"},"_npmOperationalInternal":{"tmp":"tmp/envsitter-guard_0.0.2_1768244162081_0.41367456520000623","host":"s3://npm-registry-packages-npm-production"}},"0.0.3":{"name":"envsitter-guard","version":"0.0.3","license":"MIT","_id":"envsitter-guard@0.0.3","maintainers":[{"name":"boxpositron","email":"npm@boxpositron.dev"}],"dist":{"shasum":"b70fdf01ac84bf6aaf9f51c3d417d421fe62dc6e","tarball":"https://registry.npmjs.org/envsitter-guard/-/envsitter-guard-0.0.3.tgz","fileCount":7,"integrity":"sha512-WAacnTxz/qyStosSdlEsuJMq88mSRBnlzuevtt9bpUDm81CZyynfweMgN2/0yJeh+mtaNWnEQ6hl2tFRf0f7/w==","signatures":[{"sig":"MEYCIQDYbwtGSu4WXtDfIMJZ3t9bYFFmBpj0g8/6Gi18z9yp9wIhANB0ptDx/VtS8gXmCjNG9ot15i4iSIz0O3H3+Uq1LmLf","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":52849},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"gitHead":"4c2a52d35e5abfaf4ad0ef12075465363095bb1a","scripts":{"test":"npm run build:test && node --test dist-test/test/*.test.js","build":"tsc -p tsconfig.build.json","prepack":"npm run build","typecheck":"tsc -p tsconfig.json","build:test":"tsc -p tsconfig.test.json","prepublishOnly":"npm run typecheck && npm test && npm run build"},"_npmUser":{"name":"boxpositron","email":"npm@boxpositron.dev"},"_npmVersion":"11.3.0","description":"OpenCode plugin that prevents agents/tools from reading or editing sensitive .env* files, while still allowing safe inspection via EnvSitter.","directories":{},"_nodeVersion":"22.14.0","dependencies":{"envsitter":"^0.0.3","@opencode-ai/plugin":"^1.1.14"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","typescript":"*","@types/node":"*"},"_npmOperationalInternal":{"tmp":"tmp/envsitter-guard_0.0.3_1768329628524_0.24870966641076686","host":"s3://npm-registry-packages-npm-production"}},"0.0.4":{"name":"envsitter-guard","version":"0.0.4","description":"OpenCode plugin that prevents agents/tools from reading or editing sensitive .env* files, while still allowing safe inspection via EnvSitter.","license":"MIT","keywords":["opencode","opencode-plugin","dotenv","env","secrets","security","guard","agent","llm","ai","mcp","envsitter"],"type":"module","repository":{"type":"git","url":"git+https://github.com/boxpositron/envsitter-guard.git"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"main":"./dist/index.js","types":"./dist/index.d.ts","scripts":{"build":"tsc -p tsconfig.build.json","typecheck":"tsc -p tsconfig.json","build:test":"tsc -p tsconfig.test.json","test":"npm run build:test && node --test dist-test/test/*.test.js","prepack":"npm run build","prepublishOnly":"npm run typecheck && npm test && npm run build"},"dependencies":{"@opencode-ai/plugin":"^1.1.14","envsitter":"^0.0.4"},"devDependencies":{"@types/node":"*","husky":"^9.1.7","typescript":"*"},"publishConfig":{"access":"public"},"_id":"envsitter-guard@0.0.4","gitHead":"17e37f2f76ea2c3fcc793a9082e06ab01f6f2e82","bugs":{"url":"https://github.com/boxpositron/envsitter-guard/issues"},"homepage":"https://github.com/boxpositron/envsitter-guard#readme","_nodeVersion":"22.14.0","_npmVersion":"11.3.0","dist":{"integrity":"sha512-CaWK/T6uAY6rvNnqCuumuvqfdTBhC+p5vsy0SssB+AtCN4prV5A9ZuAD1nVTA6LdREiS1g1V4Mz96pjXiLjkHg==","shasum":"0721f017d1ff32f6adbef8c1b2ffe8301c072fc6","tarball":"https://registry.npmjs.org/envsitter-guard/-/envsitter-guard-0.0.4.tgz","fileCount":7,"unpackedSize":71912,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIGIifqRh99K1R1dWTIX9aazgWC/FZv/exCgjbXyVw05DAiEAmT1WOPHO6K2ky/tagsjcGGAWEthMs2NConCQvO3fTqI="}]},"_npmUser":{"name":"boxpositron","email":"npm@boxpositron.dev"},"directories":{},"maintainers":[{"name":"boxpositron","email":"npm@boxpositron.dev"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/envsitter-guard_0.0.4_1768514555401_0.7181659822639173"},"_hasShrinkwrap":false}},"time":{"created":"2026-01-12T13:04:30.468Z","modified":"2026-01-15T22:02:35.697Z","0.0.1":"2026-01-12T13:04:30.703Z","0.0.2":"2026-01-12T18:56:02.229Z","0.0.3":"2026-01-13T18:40:28.667Z","0.0.4":"2026-01-15T22:02:35.558Z"},"license":"MIT","description":"OpenCode plugin that prevents agents/tools from reading or editing sensitive .env* files, while still allowing safe inspection via EnvSitter.","maintainers":[{"name":"boxpositron","email":"npm@boxpositron.dev"}],"readme":"# envsitter-guard\n\nOpenCode plugin that prevents agents/tools from reading or editing sensitive `.env*` files, while still allowing safe inspection via EnvSitter (keys + deterministic fingerprints; never values).\n\n## Quickstart (OpenCode)\n\nOpenCode supports loading plugins from npm or local plugin files.\n\nReference docs:\n- https://opencode.ai/docs/plugins/\n- https://opencode.ai/docs/config/#plugins\n\n### Option A (recommended): load from npm via `opencode.json`\n\nAdd the plugin package to your OpenCode config.\n\n`opencode.json`:\n\n```json\n{\n  \"$schema\": \"https://opencode.ai/config.json\",\n  \"plugin\": [\"envsitter-guard@latest\"]\n}\n```\n\nRestart OpenCode after updating config.\n\n## Why\n\nAccidentally printing `.env` contents is one of the easiest ways for an agentic workflow to leak secrets into:\n\n- chat transcripts\n- logs/tool output\n- commits/patches\n- screenshots / shared sessions\n\n`envsitter-guard` blocks risky operations and points you to safe alternatives.\n\nThis plugin is built on top of [envsitter](https://github.com/boxpositron/envsitter), a library for safely inspecting and matching `.env` secrets without ever printing values.\n\n## What it does\n\nThis plugin provides safe EnvSitter-backed tools and blocks sensitive file access via OpenCode tool hooks.\n\n### Safe tools (no values)\n\nThese tools never return raw `.env` values:\n\n**Reading:**\n- `envsitter_keys`: list keys in a dotenv file\n- `envsitter_fingerprint`: deterministic fingerprint of a single key's value\n- `envsitter_scan`: scan value *shapes* (jwt/url/base64) without printing values\n\n**Matching:**\n- `envsitter_match`: boolean/shape checks and outside-in candidate matching (without printing values)\n- `envsitter_match_by_key`: bulk candidate-by-key matching (returns booleans only)\n\n**Mutations:**\n- `envsitter_add`: add a new key (fails if key exists)\n- `envsitter_set`: set a key's value (creates or updates)\n- `envsitter_unset`: unset a key's value (sets to empty, keeps the key)\n- `envsitter_delete`: delete key(s) entirely from the file\n\n**File Operations:**\n- `envsitter_validate`: validate dotenv syntax (no values; issues only)\n- `envsitter_copy`: copy keys between env files (no values; plan + line numbers only)\n- `envsitter_format` / `envsitter_reorder`: reorder/format env files (no values)\n- `envsitter_annotate`: add comments near keys (no values)\n\n**Help:**\n- `envsitter_help`: comprehensive usage guide for all tools (topics: `overview`, `reading`, `matching`, `mutations`, `file_ops`, `all`)\n\nNotes for file operations:\n\n- File operations are dry-run unless `write: true` is provided.\n- Tools only return keys, booleans, and line numbers/operation plans.\n\n### Blocking behavior\n\n- Sensitive paths: `.env`, `.env.local`, `.env.production`, etc. (`.env*`)\n- Allowed: `.env.example`\n- Always blocked: `.envsitter/pepper`\n\nBlocked operations via tool hooks:\n\n- `read` on sensitive `.env*` paths\n- `edit` / `write` / `patch` / `multiedit` on sensitive `.env*` paths\n\nWhen blocked, the plugin throws an error with guidance on which EnvSitter tools to use instead.\n\n## Tools\n\nTools only operate on `.env`-style files inside the current project.\n\n- Most tools accept a `filePath` that defaults to `.env`.\n- File operations are dry-run unless `write: true` is provided.\n\n### `envsitter_keys`\n\nLists keys in a dotenv file.\n\n- Input: `{ \"filePath\"?: string, \"filterRegex\"?: string }`\n- Output: JSON `{ file, keys }`\n\nExample (inside OpenCode):\n\n```json\n{ \"tool\": \"envsitter_keys\", \"args\": { \"filePath\": \".env\" } }\n```\n\nOptional filtering:\n\n```json\n{ \"tool\": \"envsitter_keys\", \"args\": { \"filePath\": \".env\", \"filterRegex\": \"/^(API_|DB_)/\" } }\n```\n\n### `envsitter_fingerprint`\n\nComputes a deterministic fingerprint of a single key.\n\n- Input: `{ \"filePath\"?: string, \"key\": string }`\n- Output: JSON `{ file, key, result }`\n\nExample (inside OpenCode):\n\n```json\n{ \"tool\": \"envsitter_fingerprint\", \"args\": { \"filePath\": \".env\", \"key\": \"DATABASE_URL\" } }\n```\n\n### `envsitter_match`\n\nMatches key values without printing them.\n\n- Input:\n  - `{ \"filePath\"?: string, \"op\"?: string, \"key\"?: string, \"keys\"?: string[], \"allKeys\"?: boolean, \"candidate\"?: string, \"candidateEnvVar\"?: string }`\n- Output:\n  - If `key` provided: JSON `{ file, key, op, match }`\n  - If `keys` or `allKeys`: JSON `{ file, op, matches }`\n\nNotes:\n\n- Provide exactly one selector: `key`, `keys`, or `allKeys: true`.\n- For ops that compare against a candidate (`is_equal`, `partial_match_*`), provide `candidate` or `candidateEnvVar`.\n\nExamples (inside OpenCode):\n\n```json\n{ \"tool\": \"envsitter_match\", \"args\": { \"filePath\": \".env\", \"key\": \"SENTRY_DSN\", \"op\": \"exists\" } }\n```\n\n```json\n{ \"tool\": \"envsitter_match\", \"args\": { \"filePath\": \".env\", \"key\": \"PORT\", \"op\": \"is_number\" } }\n```\n\n```json\n{ \"tool\": \"envsitter_match\", \"args\": { \"filePath\": \".env\", \"key\": \"NODE_ENV\", \"op\": \"is_equal\", \"candidate\": \"production\" } }\n```\n\n### `envsitter_match_by_key`\n\nBulk match candidates-by-key without printing values (returns booleans only).\n\n- Input:\n  - `{ \"filePath\"?: string, \"candidatesByKey\"?: Record<string,string>, \"candidatesByKeyJson\"?: string, \"candidatesByKeyEnvVar\"?: string }`\n- Output: JSON `{ file, matches }`\n\nNote: provide exactly one of `candidatesByKey`, `candidatesByKeyJson`, or `candidatesByKeyEnvVar`.\n\nExample (inside OpenCode):\n\n```json\n{ \"tool\": \"envsitter_match_by_key\", \"args\": { \"filePath\": \".env\", \"candidatesByKey\": { \"NODE_ENV\": \"production\" } } }\n```\n\n### `envsitter_scan`\n\nScan value shapes (jwt/url/base64) without printing values.\n\n- Input: `{ \"filePath\"?: string, \"detect\"?: (\"jwt\"|\"url\"|\"base64\")[], \"keysFilterRegex\"?: string }`\n- Output: JSON `{ file, findings }`\n\nExample (inside OpenCode):\n\n```json\n{ \"tool\": \"envsitter_scan\", \"args\": { \"filePath\": \".env\", \"detect\": [\"jwt\", \"url\"] } }\n```\n\n### `envsitter_validate`\n\nValidate dotenv syntax.\n\n- Input: `{ \"filePath\"?: string }`\n- Output: JSON `{ file, ok, issues }`\n\nExample (inside OpenCode):\n\n```json\n{ \"tool\": \"envsitter_validate\", \"args\": { \"filePath\": \".env\" } }\n```\n\n### `envsitter_copy`\n\nCopy keys between env files. Output includes a plan (keys + line numbers), never values.\n\n- Input:\n  - `{ \"from\": string, \"to\": string, \"keys\"?: string[], \"includeRegex\"?: string, \"excludeRegex\"?: string, \"rename\"?: string, \"onConflict\"?: \"error\"|\"skip\"|\"overwrite\", \"write\"?: boolean }`\n- Output: JSON `{ from, to, onConflict, willWrite, wrote, hasChanges, issues, plan }`\n\nExamples (inside OpenCode):\n\n```json\n{ \"tool\": \"envsitter_copy\", \"args\": { \"from\": \".env.production\", \"to\": \".env.staging\", \"keys\": [\"API_URL\"], \"onConflict\": \"overwrite\" } }\n```\n\n```json\n{ \"tool\": \"envsitter_copy\", \"args\": { \"from\": \".env.production\", \"to\": \".env.staging\", \"keys\": [\"API_URL\"], \"onConflict\": \"overwrite\", \"write\": true } }\n```\n\n### `envsitter_format` / `envsitter_reorder`\n\nFormat/reorder an env file (no values in output).\n\n- Input: `{ \"filePath\"?: string, \"mode\"?: \"sections\"|\"global\", \"sort\"?: \"alpha\"|\"none\", \"write\"?: boolean }`\n- Output: JSON `{ file, mode, sort, willWrite, wrote, hasChanges, issues }`\n\nExample (inside OpenCode):\n\n```json\n{ \"tool\": \"envsitter_format\", \"args\": { \"filePath\": \".env\", \"mode\": \"sections\", \"sort\": \"alpha\", \"write\": true } }\n```\n\n### `envsitter_annotate`\n\nAnnotate an env key with a comment (no values in output).\n\n- Input: `{ \"filePath\"?: string, \"key\": string, \"comment\": string, \"line\"?: number, \"write\"?: boolean }`\n- Output: JSON `{ file, key, willWrite, wrote, hasChanges, issues, plan }`\n\nExample (inside OpenCode):\n\n```json\n{ \"tool\": \"envsitter_annotate\", \"args\": { \"filePath\": \".env\", \"key\": \"DATABASE_URL\", \"comment\": \"prod only\", \"write\": true } }\n```\n\n### `envsitter_add`\n\nAdd a new key to a dotenv file (fails if key already exists).\n\n- Input: `{ \"filePath\"?: string, \"key\": string, \"value\": string, \"write\"?: boolean }`\n- Output: JSON `{ file, key, willWrite, wrote, hasChanges, issues, plan }`\n\nExample (inside OpenCode):\n\n```json\n{ \"tool\": \"envsitter_add\", \"args\": { \"filePath\": \".env\", \"key\": \"NEW_API_KEY\", \"value\": \"sk-xxx\", \"write\": true } }\n```\n\n### `envsitter_set`\n\nSet a key's value in a dotenv file (creates if missing, updates if exists).\n\n- Input: `{ \"filePath\"?: string, \"key\": string, \"value\": string, \"write\"?: boolean }`\n- Output: JSON `{ file, key, willWrite, wrote, hasChanges, issues, plan }`\n\nExample (inside OpenCode):\n\n```json\n{ \"tool\": \"envsitter_set\", \"args\": { \"filePath\": \".env\", \"key\": \"API_KEY\", \"value\": \"new-value\", \"write\": true } }\n```\n\n### `envsitter_unset`\n\nUnset a key's value (sets to empty string, keeps the key line).\n\n- Input: `{ \"filePath\"?: string, \"key\": string, \"write\"?: boolean }`\n- Output: JSON `{ file, key, willWrite, wrote, hasChanges, issues, plan }`\n\nExample (inside OpenCode):\n\n```json\n{ \"tool\": \"envsitter_unset\", \"args\": { \"filePath\": \".env\", \"key\": \"OLD_KEY\", \"write\": true } }\n```\n\n### `envsitter_delete`\n\nDelete key(s) from a dotenv file entirely (removes the line).\n\n- Input: `{ \"filePath\"?: string, \"keys\": string[], \"write\"?: boolean }`\n- Output: JSON `{ file, keys, willWrite, wrote, hasChanges, issues, plan }`\n\nExample (inside OpenCode):\n\n```json\n{ \"tool\": \"envsitter_delete\", \"args\": { \"filePath\": \".env\", \"keys\": [\"OLD_KEY\", \"UNUSED_KEY\"], \"write\": true } }\n```\n\n### `envsitter_help`\n\nGet comprehensive help on all EnvSitter tools.\n\n- Input: `{ \"topic\"?: \"overview\" | \"reading\" | \"matching\" | \"mutations\" | \"file_ops\" | \"all\" }`\n- Output: Markdown documentation for the requested topic\n\nTopics:\n- `overview`: What EnvSitter is and tool categories\n- `reading`: `envsitter_keys`, `envsitter_fingerprint`, `envsitter_scan`\n- `matching`: `envsitter_match`, `envsitter_match_by_key` with all operators\n- `mutations`: `envsitter_add`, `envsitter_set`, `envsitter_unset`, `envsitter_delete`\n- `file_ops`: `envsitter_validate`, `envsitter_copy`, `envsitter_format`, `envsitter_annotate`\n- `all`: Full guide (default)\n\nExample (inside OpenCode):\n\n```json\n{ \"tool\": \"envsitter_help\", \"args\": { \"topic\": \"mutations\" } }\n```\n\n## Install & enable in OpenCode (alternatives)\n\n### Option B: local plugin file (project-level)\n\nIf you want a local plugin file in-repo (or need local overrides), create `.opencode/plugin/envsitter-guard.ts`:\n\n```ts\nimport EnvSitterGuard from \"envsitter-guard\";\n\nexport default EnvSitterGuard;\nexport { EnvSitterGuard } from \"envsitter-guard\";\n```\n\nThen create `.opencode/package.json` with the dependency so OpenCode can install it:\n\n```json\n{\n  \"dependencies\": {\n    \"envsitter-guard\": \"latest\"\n  }\n}\n```\n\nRestart OpenCode; files in `.opencode/plugin/` are loaded automatically.\n\n### Option C: global plugin file\n\nPlace a plugin file in `~/.config/opencode/plugin/` if you want it enabled for all projects.\n\n(You can use the same contents as Option B.)\n\n## Development\n\n### Install\n\n```bash\nnpm ci\n```\n\n### Typecheck\n\n```bash\nnpm run typecheck\n```\n\n### Test\n\n```bash\nnpm test\n```\n\n### Build (for publishing)\n\n```bash\nnpm run build\n```\n\n## Related\n\n- [envsitter](https://github.com/boxpositron/envsitter) — The underlying library this plugin is built on. Provides CLI and programmatic API for safe `.env` inspection.\n- EnvSitter CLI: `npx envsitter keys --file .env` (alternative to plugin tools)\n\n## Notes\n\n- This project intentionally avoids reading or printing `.env` values.\n- All tools return keys, booleans, line numbers, and operation plans — never secret values.\n\n## License\n\nMIT. See `LICENSE`.\n","readmeFilename":"README.md","homepage":"https://github.com/boxpositron/envsitter-guard#readme","keywords":["opencode","opencode-plugin","dotenv","env","secrets","security","guard","agent","llm","ai","mcp","envsitter"],"repository":{"type":"git","url":"git+https://github.com/boxpositron/envsitter-guard.git"},"bugs":{"url":"https://github.com/boxpositron/envsitter-guard/issues"}}