docs: add README and MIT license
This commit is contained in:
21
LICENSE
Normal file
21
LICENSE
Normal file
@@ -0,0 +1,21 @@
|
||||
MIT License
|
||||
|
||||
Copyright (c) 2026 BoxPositron
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
154
README.md
Normal file
154
README.md
Normal file
@@ -0,0 +1,154 @@
|
||||
# envsitter-guard
|
||||
|
||||
OpenCode plugin that prevents agents/tools from reading or editing sensitive `.env*` files, while still allowing safe inspection via EnvSitter (keys + deterministic fingerprints; never values).
|
||||
|
||||
## Why
|
||||
|
||||
Accidentally printing `.env` contents is one of the easiest ways for an agentic workflow to leak secrets into:
|
||||
|
||||
- chat transcripts
|
||||
- logs/tool output
|
||||
- commits/patches
|
||||
- screenshots / shared sessions
|
||||
|
||||
`envsitter-guard` blocks the risky operations and points users to safe alternatives.
|
||||
|
||||
## What it does
|
||||
|
||||
This plugin does two things:
|
||||
|
||||
1. Adds safe tools:
|
||||
- `envsitter_keys`: list keys in a dotenv file (no values)
|
||||
- `envsitter_fingerprint`: hash/fingerprint one key’s value (no value)
|
||||
2. Blocks sensitive file access via OpenCode tool hooks:
|
||||
- blocks `read` of sensitive `.env*` paths
|
||||
- blocks `edit` / `write` / `patch` of sensitive `.env*` paths
|
||||
- blocks access to `.envsitter/pepper`
|
||||
|
||||
`.env.example` is explicitly allowed.
|
||||
|
||||
## Tools
|
||||
|
||||
### `envsitter_keys`
|
||||
|
||||
Lists keys in a dotenv file.
|
||||
|
||||
- Input: `{ "filePath"?: string }` (defaults to `.env`)
|
||||
- Output: JSON `{ file, keys }`
|
||||
|
||||
Example (inside OpenCode):
|
||||
|
||||
```json
|
||||
{ "tool": "envsitter_keys", "args": { "filePath": ".env" } }
|
||||
```
|
||||
|
||||
### `envsitter_fingerprint`
|
||||
|
||||
Computes a deterministic fingerprint of a single key.
|
||||
|
||||
- Input: `{ "filePath"?: string, "key": string }` (filePath defaults to `.env`)
|
||||
- Output: JSON `{ file, key, result }`
|
||||
|
||||
Example (inside OpenCode):
|
||||
|
||||
```json
|
||||
{ "tool": "envsitter_fingerprint", "args": { "filePath": ".env", "key": "DATABASE_URL" } }
|
||||
```
|
||||
|
||||
## Install & enable in OpenCode
|
||||
|
||||
OpenCode supports loading plugins either from local files or from npm.
|
||||
|
||||
Reference docs:
|
||||
- https://opencode.ai/docs/plugins/
|
||||
- https://opencode.ai/docs/config/#plugins
|
||||
|
||||
### Option A (recommended): load from npm via `opencode.json`
|
||||
|
||||
Add the plugin package to your OpenCode config.
|
||||
|
||||
`opencode.json`:
|
||||
|
||||
```json
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"plugin": ["envsitter-guard@latest"]
|
||||
}
|
||||
```
|
||||
|
||||
Notes:
|
||||
- OpenCode installs npm plugins automatically using Bun at startup.
|
||||
- If you prefer, you can omit `@latest` and you’ll still get the latest by default: `"plugin": ["envsitter-guard"]`.
|
||||
|
||||
### Option B: local plugin file (project-level)
|
||||
|
||||
If you want a local plugin file in-repo (or need local overrides), create `.opencode/plugin/envsitter-guard.ts`:
|
||||
|
||||
```ts
|
||||
import EnvSitterGuard from "envsitter-guard";
|
||||
|
||||
export default EnvSitterGuard;
|
||||
export { EnvSitterGuard } from "envsitter-guard";
|
||||
```
|
||||
|
||||
Then create `.opencode/package.json` with the dependency so OpenCode can install it:
|
||||
|
||||
```json
|
||||
{
|
||||
"dependencies": {
|
||||
"envsitter-guard": "latest"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Restart OpenCode; files in `.opencode/plugin/` are loaded automatically.
|
||||
|
||||
### Option C: global plugin file
|
||||
|
||||
Place a plugin file in `~/.config/opencode/plugin/` if you want it enabled for all projects.
|
||||
|
||||
(You can use the same contents as Option B.)
|
||||
|
||||
## Behavior details
|
||||
|
||||
### What paths are considered sensitive?
|
||||
|
||||
- Sensitive: `.env`, `.env.local`, `.env.production`, etc. (`.env*`)
|
||||
- Allowed: `.env.example`
|
||||
- Always blocked: `.envsitter/pepper`
|
||||
|
||||
### What operations are blocked?
|
||||
|
||||
- `read` on sensitive `.env*` paths
|
||||
- `edit` / `write` / `patch` on sensitive `.env*` paths
|
||||
|
||||
When blocked, the plugin shows a throttled warning toast and suggests using EnvSitter instead.
|
||||
|
||||
## Development
|
||||
|
||||
### Install
|
||||
|
||||
```bash
|
||||
npm ci
|
||||
```
|
||||
|
||||
### Typecheck
|
||||
|
||||
```bash
|
||||
npm run typecheck
|
||||
```
|
||||
|
||||
There are currently no lint or test scripts in this repo.
|
||||
|
||||
## Publishing notes (npm)
|
||||
|
||||
You said you plan to publish as `envsitter-guard@0.0.1`, but want installs to always use latest.
|
||||
|
||||
- Publishing a version like `0.0.1` is normal.
|
||||
- For end users, recommend installing/loading `envsitter-guard@latest` (or just `envsitter-guard`) so they get the newest published version.
|
||||
|
||||
Before publishing, double-check that the package entrypoint is compatible with how OpenCode loads npm plugins (OpenCode installs via Bun and loads the package as a module). If you change packaging (build output, exports), keep `.opencode/plugin/envsitter-guard.ts` as a thin re-export only.
|
||||
|
||||
## License
|
||||
|
||||
MIT. See `LICENSE`.
|
||||
Reference in New Issue
Block a user