{"_id":"@darkm3tter/repo-guard","_rev":"2-0bc54008cc53b5cdc4ce84d4888866c0","name":"@darkm3tter/repo-guard","dist-tags":{"latest":"0.1.1"},"versions":{"0.1.0":{"name":"@darkm3tter/repo-guard","version":"0.1.0","keywords":["mcp","guardrails","security","agents","vibe-coding","policy"],"license":"MIT","_id":"@darkm3tter/repo-guard@0.1.0","maintainers":[{"name":"darkm3tter","email":"mygcubas123@gmail.com"}],"bin":{"repo-guard":"dist/cli.js"},"dist":{"shasum":"28597ebc366029e328431040e5caf674575d4833","tarball":"https://registry.npmjs.org/@darkm3tter/repo-guard/-/repo-guard-0.1.0.tgz","fileCount":21,"integrity":"sha512-RbQUoDgXToaJJi5w7suDBPSe/NvmkCGI499d+OSO8W0+huKTccvt2B1F5A+Ujwx36sder3F57J6shxxM5UHASQ==","signatures":[{"sig":"MEQCIETM/QnqblKpieXH4yF7fuYOhKdJyTqzLC6EsAvpyfo/AiAWweN2Pl+A32fU9G0mbZm2AFkv3v2Ia+8b3IDgigC+AQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1192062},"type":"module","types":"src/index.ts","module":"src/index.ts","engines":{"bun":">=1.1"},"exports":{".":"./src/index.ts"},"gitHead":"4d6acf4a2803261d4d57137e23d74a6479243143","scripts":{"test":"bun test","build":"bun run scripts/build.ts","typecheck":"tsc --noEmit","test:coverage":"bun test --coverage","prepublishOnly":"bun run build"},"_npmUser":{"name":"darkm3tter","email":"mygcubas123@gmail.com"},"_npmVersion":"10.9.4","description":"Executable policy engine for coding agents: gate what touches your repo (paths, contents, commands), not just tool names. MCP server + CLI + hooks.","directories":{},"_nodeVersion":"22.22.0","dependencies":{"zod":"^4.4.3","@modelcontextprotocol/sdk":"^1.30.0"},"_hasShrinkwrap":false,"devDependencies":{"@types/bun":"^1.3.14","typescript":"^7.0.2"},"_npmOperationalInternal":{"tmp":"tmp/repo-guard_0.1.0_1786149236393_0.744049364565015","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"@darkm3tter/repo-guard","version":"0.1.1","description":"Executable policy engine for coding agents: gate what touches your repo (paths, contents, commands), not just tool names. MCP server + CLI + hooks.","type":"module","module":"src/index.ts","types":"src/index.ts","exports":{".":"./src/index.ts"},"bin":{"repo-guard":"dist/cli.js"},"scripts":{"build":"bun run scripts/build.ts","test":"bun test","test:coverage":"bun test --coverage","typecheck":"tsc --noEmit","prepublishOnly":"bun run build"},"keywords":["mcp","guardrails","security","agents","vibe-coding","policy"],"license":"MIT","engines":{"bun":">=1.1"},"dependencies":{"@modelcontextprotocol/sdk":"^1.30.0","zod":"^4.4.3"},"devDependencies":{"@types/bun":"^1.3.14","typescript":"^7.0.2"},"_id":"@darkm3tter/repo-guard@0.1.1","gitHead":"4adfc20cb709b3f6b812dbd4047a90d38304219d","_nodeVersion":"22.23.1","_npmVersion":"10.9.8","dist":{"integrity":"sha512-JhgrG3jRYvM74GsrDgPLDscjqbdKnQ/Pj1rigtAlgqkjVfbYpouR51py4IQo3qxnvOTgezr2Y7sWBJQMh9uqsQ==","shasum":"6081049108a12d3dac4de59f2dadcfcc061c7dea","tarball":"https://registry.npmjs.org/@darkm3tter/repo-guard/-/repo-guard-0.1.1.tgz","fileCount":21,"unpackedSize":1192063,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQCJBWkNOE/ayjtajimFTEnURjQmzdIBhedj42Y3sgrqvQIgU9tWD7Bkoo2NYaNWBIg0Log7JyYTEffO72eFKGz0PzU="}]},"_npmUser":{"name":"darkm3tter","email":"mygcubas123@gmail.com"},"directories":{},"maintainers":[{"name":"darkm3tter","email":"mygcubas123@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/repo-guard_0.1.1_1786150572444_0.35258927225782677"},"_hasShrinkwrap":false}},"time":{"created":"2026-08-08T00:33:56.182Z","modified":"2026-08-08T00:56:12.765Z","0.1.0":"2026-08-08T00:33:56.626Z","0.1.1":"2026-08-08T00:56:12.608Z"},"license":"MIT","keywords":["mcp","guardrails","security","agents","vibe-coding","policy"],"description":"Executable policy engine for coding agents: gate what touches your repo (paths, contents, commands), not just tool names. MCP server + CLI + hooks.","maintainers":[{"name":"darkm3tter","email":"mygcubas123@gmail.com"}],"readme":"# repo-guard\n\n> **Firewall programático de políticas para agentes de código.** AGENTS.md sugiere; `repo-guard` **decide y bloquea**.\n\nLos agentes de código (Claude Code, opencode, Cursor) ejecutan acciones con tus privilegios: escribir archivos, borrar, correr comandos. Las guías en texto (AGENTS.md) son *sugerencias* que el agente puede ignorar. `repo-guard` es un **motor de políticas ejecutable** que evalúa cada acción contra reglas deterministas y devuelve `allow` / `deny` / `confirm` con razones.\n\nDiferente de los proxies MCP que gatean **por nombre de herramienta**: repo-guard inspecciona **qué toca tu repo** — rutas (globs), **contenido** (patrones de secretos) y **comandos** (`rm -rf`, `curl | sh`, `git push --force`).\n\n## Instalación\n\n```bash\nnpm install -g @darkm3tter/repo-guard   # CLI + hook\n# o local:\nnpm install --save-dev @darkm3tter/repo-guard\n```\n\n## Uso rápido (CLI)\n\n```bash\nrepo-guard check --write .env --content \"X=1\"\n# repo-guard: BLOQUEADO\n#   - ruta protegida: **/.env*\n\nrepo-guard check --command \"git push origin main --force\"\n# repo-guard: BLOQUEADO\n#   - git push --force (force-push)\n\nrepo-guard check --write src/app.ts --content \"const x = 1\"\n# repo-guard: OK\n```\n\nExit codes: `0` permitido · `1` bloqueado/aprobación · `2` uso · `3` config inválida.\n\n## Configuración\n\n`repo-guard.config.json` en la raíz del proyecto (o `REPO_GUARD_CONFIG`):\n\n```json\n{\n  \"mode\": \"enforce\",\n  \"defaultAction\": \"allow\",\n  \"rules\": [\n    { \"id\": \"no-touch-secrets\", \"kind\": \"protect\", \"path\": \"**/.env*\", \"message\": \"secretos\" },\n    { \"id\": \"no-logs-prod\", \"kind\": \"block\", \"path\": \"src/**\", \"pattern\": \"console\\\\.log\" },\n    { \"id\": \"confirm-migrations\", \"kind\": \"require-confirm\", \"path\": \"prisma/migrations/**\" },\n    { \"id\": \"no-force-push\", \"kind\": \"block\", \"command\": \"git push.*--force\" }\n  ]\n}\n```\n\n| `kind` | Frontera | Efecto |\n|---|---|---|\n| `protect` | glob de ruta (write/delete) | `deny` |\n| `block` | glob + regex de contenido (write) o regex de comando | `deny` |\n| `require-confirm` | glob o regex | `confirm` |\n| `allow` | glob o regex | `allow` (vence al default) |\n\nPrecedencia: **deny > confirm > allow > default**. Soporta `**`/`*`/`?` en globs y el prefijo `(?i)` en regex.\n\n## Reglas built-in (overridables)\n\n| id | Qué protege |\n|---|---|\n| `builtin-protect-env` | `**/.env*` |\n| `builtin-protect-npmrc` | `**/.npmrc` |\n| `builtin-protect-ssh` | `**/.ssh/**` |\n| `builtin-confirm-lockfile` | `package-lock.json` |\n| `builtin-confirm-pkgjson` | `package.json` |\n| `builtin-confirm-gitignore` | `.gitignore` |\n| `builtin-block-secrets` | secretos hardcodeados en cualquier write (`apiKey = \"sk-...\"`) |\n| `builtin-dangerous-command` | `rm -rf /`, `curl\\|sh`, `git push --force`, `chmod -R 777`, `dd`, `mkfs`, fork bombs, shell base64 |\n\nUna regla del usuario con el mismo `id` sobreescribe la built-in.\n\n## Modos\n\n- **`enforce`** (default): bloquea de verdad.\n- **`log-only`**: no bloquea — reporta qué habría bloqueado (`--log-only` en CLI, o `\"mode\": \"log-only\"`). Ideal para adopción gradual.\n\n## Como MCP server\n\n`repo-guard mcp` arranca un servidor MCP (stdio) que expone:\n\n- `guard_check` — evalúa una acción (kind + path/content/command)\n- `guard_config` — las reglas activas, para que el agente conozca los límites\n- `guard_report` — resumen de la sesión (checks, bloqueos, confirmaciones)\n- `guard_allow` — permite temporalmente una regla para la sesión\n\nConfiguración en Claude Code (`.mcp.json`) / opencode (`opencode.json`):\n\n```json\n{ \"mcpServers\": { \"repo-guard\": { \"command\": \"repo-guard\", \"args\": [\"mcp\"] } } }\n```\n\n## Como hook (bloqueo nativo)\n\nEl hook lee la llamada de herramienta del agente desde stdin y sale `!= 0` para bloquear. Ver `examples/opencode.hook.json` y `examples/claude-code.settings.json`.\n\n```bash\necho '{\"tool\":\"bash\",\"toolInput\":{\"command\":\"rm -rf /\"}}' | node node_modules/repo-guard/dist/hook.js\n# [repo-guard] BLOQUEADO: command rm -rf /\n```\n\n## Desarrollo\n\n```bash\nbun install\nbun test                 # 56+ tests\nbun run typecheck        # TS estricto\nbun run build            # dist/cli.js + dist/hook.js\n```\n\n## Licencia\n\nMIT\n","readmeFilename":"README.md"}