Skip to content

feat(hive): guardia de escritura en el hive + piso de versión de Claude Code - #5

Merged
DannyBaanks merged 3 commits into
mainfrom
claude/nifty-ramanujan-daxt74-guard
Sep 25, 2026
Merged

DannyBaanks merged 3 commits into
mainfrom
claude/nifty-ramanujan-daxt74-guard

Conversation

@DannyBaanks

@DannyBaanks DannyBaanks commented Sep 25, 2026 •

Copy link
Copy Markdown
Owner

What & why

PR 2 de la serie; va apilado sobre #4. Porta y adapta dos piezas de agentvivekkumar/dontbemichael (Vivek Kumar, MIT).

1. Guardia del hive (hiveGuard.ts, adaptado de harnessGuard.ts). Un hook PreToolUse niega Write, Edit, MultiEdit y NotebookEdit dentro del hive, salvo en los archivos de protocolo que le tocan al agente:

  • los suyos: agents/<id>/memory.md, inbox/ y outbox/;
  • tasks.json;
  • y solo para god: board.md y spawn-requests/.

Evita que un agente escriba en el buzón o la memoria de otro, o que toque registry.json, fleet.json o log.jsonl. Esto atiende parte de los hallazgos #8 y #9 de la auditoría: una tarea que llega por Munder Link ya no puede corromper el hive con herramientas de archivo.

Diferencia con el original: allá protegen todo el harness home. Aquí el home puede ser la carpeta padre de los proyectos del operador (y god corre con él como cwd), así que solo se protege el hive, y queda siempre activo.

Limitaciones que siguen, documentadas en el archivo: no revisa Bash, y si el socket no responde, el hook deja pasar la escritura. La escritura concurrente a tasks.json (#8) necesita su propio lock y no entra en este PR.

2. Piso de versión de Claude Code (modelCliFloor.ts + claudeCliVersion.ts). Si el claude instalado no conoce el modelo pedido (Opus 5.5 requiere 2.1.280 o más), lo cambia por su fallback y lo deja en el log. Así el agente arranca en vez de morir al iniciar. El chequeo vive en spawnAgentCore, la puerta común de la UI, el canal de control (munder sesion armar) y los workers.

Type of change

  • New feature
  • Bug fix

Evidence

Before

Sin guardia: un agente podía hacer Write sobre hive/registry.json o sobre hive/agents/jim/inbox/x.json sin ningún freno. El test del hook, corrido sin el cableado en hooks.ts: # pass 7 / # fail 1.

After

test/hive-guard.test.cjs 8/8. Incluye el paso por el HookServer real: la escritura en registry.json sale como permissionDecision: 'deny' con una razón, mientras que memory.md propio y los archivos del repo pasan. También cubre intentos con .. y con mayúsculas en sistemas de archivos que no distinguen mayúsculas.
model-cli-floor 8/8 y claude-cli-version 4/4.

How I tested it

  • OS: Linux (contenedor), Node 22
  • Steps: npm run typecheck (limpio) y la suite completa: 894 pasan. Los 5 fallos son los mismos de entorno de siempre (node-pty y Electron sin compilar). En model-cli-floor quité la aserción de que Opus 5.5 es el modelo recomendado, porque es una decisión de producto de DBM y aquí el default es otro.

Checklist

  • Before/after arriba.
  • npm run typecheck pasa.
  • Leí el diff.

🤖 Generated with Claude Code


Generated by Claude Code

…de Code

Portado y adaptado de agentvivekkumar/dontbemichael.

- hiveGuard.ts (de harnessGuard.ts): un PreToolUse niega Write/Edit/
  MultiEdit/NotebookEdit dentro del hive salvo los archivos de protocolo del
  propio agente (memory.md, inbox/, outbox/, tasks.json; board.md y
  spawn-requests/ solo god). A diferencia del original protege solo el hive,
  no todo el harness home, porque aquí el home puede ser el padre de los
  proyectos del operador (y el cwd de god). Siempre activo.
- modelCliFloor + claudeCliVersion: un modelo que el Claude Code instalado
  no conoce (Opus 5.5 < 2.1.280) se cambia por su fallback en spawnAgentCore,
  la puerta común de la UI, el canal de control y los workers.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0141jpRihLcQWr34jq6mvC7b
@github-actions

Copy link
Copy Markdown
Contributor

🚫 This PR is missing its before/after evidence

Every pull request here has to show its work. Screenshots or a short screen recording, before the change and after it.

  • Before — no image or video under that heading
  • After — no image or video under that heading

How to fix it: edit the description, keep the ### Before and ### After headings from the template, and drag an image or video under each. GitHub uploads it inline. This check re-runs the moment you save.

A bug fix with no visible surface still needs it: show the failing behaviour, then the same steps passing. A terminal recording is fine.

Genuinely nothing to show — a CI tweak, a typo, a dependency bump? A maintainer can apply the no-visual-change label. Please don't ask unless it truly has no observable effect.

📖 CONTRIBUTING.md → Evidence is mandatory

Copy link
Copy Markdown
Owner Author

Este PR va apilado sobre #4, así que su CI completo solo corre cuando se retargetea a main. Lo haré en cuanto entre #4. El único check que corre ahora, Before / after evidence, pide imágenes que yo no puedo subir. La evidencia está en texto en la descripción; si te parece suficiente, ponle la etiqueta no-visual-change. Los otros rojos que va a heredar de main (Release links y bridge-opencode) están explicados en #4.


Generated by Claude Code

@DannyBaanks
DannyBaanks changed the base branch from claude/nifty-ramanujan-daxt74-doctext to main September 25, 2026 11:17
@DannyBaanks DannyBaanks added the no-visual-change Sin superficie visual: exime el check Before/after evidence label Sep 25, 2026
@DannyBaanks
DannyBaanks merged commit 9b0658f into main Sep 25, 2026
4 of 7 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

no-visual-change Sin superficie visual: exime el check Before/after evidence

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants