{"_id":"@alexprietoromani/project-suite","_rev":"2-49071ef0f0fca1959f5c1dd0e89446bd","name":"@alexprietoromani/project-suite","dist-tags":{"latest":"1.1.0"},"versions":{"1.0.1":{"name":"@alexprietoromani/project-suite","version":"1.0.1","keywords":["opencode-plugin","claude-code-plugin","spec-driven","planning","testing","project-management","skills"],"author":{"name":"Alex Prieto Romani"},"license":"MIT","_id":"@alexprietoromani/project-suite@1.0.1","maintainers":[{"name":"alexprietoromani","email":"alexprieto1997@gmail.com"}],"homepage":"https://github.com/AlexPrietoRomani/project-suite","bugs":{"url":"https://github.com/AlexPrietoRomani/project-suite/issues"},"dist":{"shasum":"007988dc14bfd08f860596027f5c072e06947461","tarball":"https://registry.npmjs.org/@alexprietoromani/project-suite/-/project-suite-1.0.1.tgz","fileCount":93,"integrity":"sha512-ezwvN5WSxsAeHHid0mOtgylx7FO5kJ2C/Z9kRN992Y3hx7Zcq8Wm/WeM6fC/PctAqvapIEZN2qrVl2lNgVm0TA==","signatures":[{"sig":"MEUCIEtPAxTnObGE4v3PsPCGDfjVQvI1tqtnTRY8HYas2gBxAiEA27F4vX/zrgLcb0D+OFdXV25OepZZjTA44tfzuc7CF+8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":494565},"main":"./.opencode/plugins/project-suite.mjs","exports":{".":"./.opencode/plugins/project-suite.mjs","./plugin":"./.opencode/plugins/project-suite.mjs"},"gitHead":"5b328ef14cc2f9cd5bd4e986023281a226c133a5","scripts":{"test":"node --test tests/hooks/*.test.js"},"_npmUser":{"name":"alexprietoromani","email":"alexprieto1997@gmail.com"},"repository":{"url":"git+https://github.com/AlexPrietoRomani/project-suite.git","type":"git"},"_npmVersion":"11.6.1","description":"Spec-driven project scaffolder/governor: plan first, build in phases, enforce quality gates. 20 skills, 6 commands, works with Claude Code and opencode.","directories":{},"_nodeVersion":"24.11.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/project-suite_1.0.1_1783306752352_0.7881051472108354","host":"s3://npm-registry-packages-npm-production"}},"1.1.0":{"name":"@alexprietoromani/project-suite","version":"1.1.0","description":"Spec-driven project scaffolder/governor: plan first, build in phases, enforce quality gates. 20 skills, 6 commands, works with Claude Code and opencode.","keywords":["opencode-plugin","claude-code-plugin","spec-driven","planning","testing","project-management","skills"],"license":"MIT","author":{"name":"Alex Prieto Romani"},"homepage":"https://github.com/AlexPrietoRomani/project-suite","repository":{"type":"git","url":"git+https://github.com/AlexPrietoRomani/project-suite.git"},"bugs":{"url":"https://github.com/AlexPrietoRomani/project-suite/issues"},"main":"./.opencode/plugins/project-suite.mjs","exports":{".":"./.opencode/plugins/project-suite.mjs","./plugin":"./.opencode/plugins/project-suite.mjs"},"scripts":{"test":"node --test tests/hooks/*.test.js"},"publishConfig":{"access":"public"},"gitHead":"9eed682f6b02de1a95976a5195792498137cd46e","_id":"@alexprietoromani/project-suite@1.1.0","_nodeVersion":"24.11.0","_npmVersion":"11.6.1","dist":{"integrity":"sha512-chip+6WNwM8zKOY1Jg/EcyViWI+hLbAj59Wwv6kQCCSYBUGusn2Hp7qcvC3//FUUkxYYXxjDA3Gdivq7YVZfig==","shasum":"4d8e2b3a6ba76c97e3caa30b7d3d87f47ef37bda","tarball":"https://registry.npmjs.org/@alexprietoromani/project-suite/-/project-suite-1.1.0.tgz","fileCount":94,"unpackedSize":497828,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQDVDyv3vFfNF1kU9NG1FfKouomSwpSufROnMDKv8Ifz5wIgOxIohiVXKa5pbmE9otVOdPVLzND80Vi3XRyyIcIDkvY="}]},"_npmUser":{"name":"alexprietoromani","email":"alexprieto1997@gmail.com"},"directories":{},"maintainers":[{"name":"alexprietoromani","email":"alexprieto1997@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/project-suite_1.1.0_1783314399348_0.6933215094078609"},"_hasShrinkwrap":false}},"time":{"created":"2026-07-06T02:59:12.198Z","modified":"2026-07-06T05:06:39.609Z","1.0.1":"2026-07-06T02:59:12.545Z","1.1.0":"2026-07-06T05:06:39.504Z"},"bugs":{"url":"https://github.com/AlexPrietoRomani/project-suite/issues"},"author":{"name":"Alex Prieto Romani"},"license":"MIT","homepage":"https://github.com/AlexPrietoRomani/project-suite","keywords":["opencode-plugin","claude-code-plugin","spec-driven","planning","testing","project-management","skills"],"repository":{"type":"git","url":"git+https://github.com/AlexPrietoRomani/project-suite.git"},"description":"Spec-driven project scaffolder/governor: plan first, build in phases, enforce quality gates. 20 skills, 6 commands, works with Claude Code and opencode.","maintainers":[{"name":"alexprietoromani","email":"alexprieto1997@gmail.com"}],"readme":"<h1 align=\"center\">project-suite</h1>\r\n\r\n<p align=\"center\">\r\n  <em>Planifica en documentos primero. El código sigue al plan, nunca al revés.</em>\r\n</p>\r\n\r\n<p align=\"center\">\r\n  <img src=\"https://img.shields.io/badge/version-1.1.0-111111?style=flat-square\" alt=\"Version\">\r\n  <img src=\"https://img.shields.io/badge/works%20with-Claude%20Code%20%7C%20opencode-111111?style=flat-square\" alt=\"Works with Claude Code and opencode\">\r\n  <img src=\"https://img.shields.io/badge/skills-20-111111?style=flat-square\" alt=\"20 skills\">\r\n  <img src=\"https://img.shields.io/badge/commands-6-111111?style=flat-square\" alt=\"6 commands\">\r\n  <img src=\"https://img.shields.io/badge/license-MIT-111111?style=flat-square\" alt=\"MIT license\">\r\n</p>\r\n\r\n---\r\n\r\nLe pides una feature a un agente sin este plugin: escribe el código directo, marca la tarea como hecha, y tres semanas después nadie recuerda por qué existe esa decisión de arquitectura ni si los tests que dice tener realmente corrieron.\r\n\r\nCon project-suite, ese mismo pedido primero se convierte en una Fase con Sub fases y Tareas en un documento — y el checkbox `[X]` solo se marca cuando `verificar-dod` confirma que los tests pasaron.\r\n\r\n## Antes / después\r\n\r\n**Sin el plugin**, \"agrega login social\" se convierte directo en código: el agente elige un proveedor, escribe el endpoint, y sigue. Nadie decidió eso, nadie lo documentó, y si el enfoque estaba mal ya hay tres archivos que revertir.\r\n\r\n**Con `nueva-fase` + `construir`:**\r\n\r\n```\r\nFase 4 — Autenticación social\r\n  SF4.1 — Integración OAuth (Google + GitHub)\r\n    T4.1.1 — Endpoint de callback OAuth\r\n      AC: redirige con token válido; rechaza state inválido\r\n      Test unitario: valida firma del state parameter\r\n      Test de simulación de usuario: login completo end-to-end\r\n```\r\n\r\nEl plan se escribe y se aprueba **antes** de que exista una línea de código. `construir` despacha un subagente por Tarea, cada uno cierra con `testear` + `verificar-dod` — y solo entonces el checkbox pasa a `[X]`.\r\n\r\n## Cómo funciona\r\n\r\n```mermaid\r\nflowchart LR\r\n    INIT[\"init\"]:::cmd --> ESP[\"especificar (brainstorm-first)\"]:::doc\r\n    ESP --> PLAN[\"planificar\"]:::doc\r\n    PLAN --> CONSTR[\"construir (subagente por Tarea)\"]:::loop\r\n    CONSTR --> TEST[\"testear\"]:::loop\r\n    TEST --> DOD[\"verificar-dod\"]:::loop\r\n    DOD --> COH[\"auditar-coherencia\"]:::loop\r\n    COH --> COMMIT[\"semantic-commit → pull-request\"]:::git\r\n    COMMIT --> BIT[\"bitacora (ante incidente)\"]:::doc\r\n    NUEVA[\"nueva-fase (todo cambio)\"]:::cmd -.->|\"gate\"| PLAN\r\n\r\n    classDef cmd fill:#8B5CF6,stroke:#6D28D9,color:#FFFFFF;\r\n    classDef doc fill:#3B82F6,stroke:#1D4ED8,color:#FFFFFF;\r\n    classDef loop fill:#22C55E,stroke:#15803D,color:#06310F;\r\n    classDef git fill:#EAB308,stroke:#A16207,color:#1F2937;\r\n```\r\n\r\n1. **`init`** arranca el proyecto: entrevista de diseño tipo brainstorming (una pregunta a la vez, gate de aprobación) → `docs/` desde plantillas → `CLAUDE.md`/`AGENTS.md` con las reglas → `.gitignore`.\r\n2. **`nueva-fase`** es el gate de todo cambio posterior: antes de tocar código, evalúa si la feature necesita una Fase nueva y la redacta con sus Tareas y tests.\r\n3. **`construir`** ejecuta el plan: un subagente por Tarea, contexto acotado, cierra con `testear` (crea y corre los dos niveles de test obligatorios) + `verificar-dod` (el gate real — sin verde, no hay `[X]`).\r\n4. **`auditar-coherencia`** detecta cuando el código se desvía de `architecture.md`/`diseno_db.md`. **`bitacora`** registra incidentes para no repetir el mismo bug dos veces.\r\n5. Todo commit pasa por `semantic-commit`; todo PR, por `pull-request` — nunca push directo, nunca `--no-verify` sin permiso explícito.\r\n\r\nLos documentos viven en `docs/` dentro de tu repo (auditables), en el idioma que elijas (`es | en`). Los archivos de trabajo (`docs/task/`, `docs/plan/`, `docs/logs/`, `CLAUDE.md`, `AGENTS.md`) quedan **locales por defecto** — no se versionan salvo que lo pidas al iniciar.\r\n\r\n## Comandos\r\n\r\n| Comando | Qué hace |\r\n|---|---|\r\n| `/init [idea]` | Arranca un proyecto: entrevista de diseño → `docs/` → reglas → `.gitignore` → autoría. |\r\n| `/nueva-fase [cambio]` | Gate spec-driven: evalúa si un cambio amerita una nueva Fase y la redacta **antes** de codear. |\r\n| `/modo [estricto/relajado/off]` | Cambia o consulta la intensidad del recordatorio ambiental. |\r\n| `/review [commit]` | Revisa el diff actual contra el plan: detecta código sin planificar o que contradice la spec. |\r\n| `/audit` | Audita TODO el repo contra `architecture.md` y `diseno_db.md`: detecta drift global. |\r\n| `/help` | Referencia rápida de comandos y skills. |\r\n\r\n## Skills\r\n\r\n**Documentos:** `especificar` (description + architecture + diseño DB), `planificar` (plan maestro + tareas), `bitacora` (log de incidentes), `ejecucion` (guía de arranque/deploy).\r\n\r\n**El loop de calidad:** `testear` (crea y corre tests unitarios + simulación de usuario), `verificar-dod` (gate de Definition-of-Done, sin verde no hay `[X]`), `auditar-coherencia` (drift docs↔código), `construir` (ejecuta el plan por subagentes, uno por Tarea).\r\n\r\n**Estándares de lenguaje:** `python`, `r`, `rust`, `astro`, `sql`, `ts`, `webapp`.\r\n\r\n**Empaquetadas:** `generar-diagramas` (Mermaid), `semantic-commit`, `pull-request`, `caveman`, `visualizar-datos`.\r\n\r\n## Install\r\n\r\n### Claude Code\r\n\r\n```\r\n/plugin marketplace add AlexPrietoRomani/project-suite\r\n/plugin install project-suite@project-suite-marketplace\r\n```\r\n\r\n(Envía los dos comandos como prompts separados)\r\n\r\nLa app de escritorio no tiene `/plugin`. Instálalo desde la UI: Customize → el + junto a personal plugins → Create plugin and add marketplace → Add from repository → pega la URL del repo.\r\n\r\nPregunta al instalar: idioma de documentación por defecto (`es | en`) y si versionar los archivos de trabajo (`version_working_files`, por defecto **no**).\r\n\r\n### opencode\r\n\r\n**Desde npm (recomendado):**\r\n\r\n```json\r\n{ \"plugin\": [\"@alexprietoromani/project-suite\"] }\r\n```\r\n\r\n**Desde checkout local:**\r\n\r\nEl repo trae un árbol generado desde la misma fuente:\r\n\r\n- `.opencode/skills/` — las 20 skills (SKILL.md nativo de opencode)\r\n- `.opencode/command/` — `/init`, `/nueva-fase`, `/modo`, `/review`, `/audit`, `/help`\r\n- `.opencode/plugins/project-suite.mjs` — plugin que registra comandos, skills y el system prompt\r\n- `opencode.json` — el server `codegraphcontext`\r\n\r\nAbre opencode dentro del repo (lee `.opencode/` + `opencode.json`), o copia `.opencode/*` a `~/.config/opencode/` y fusiona el bloque `mcp`.\r\n\r\n> `.opencode/` y `opencode.json` son **generados**, no los edites a mano. Tras tocar `skills/`, `commands/` o `.mcp.json`: `python scripts/sync_opencode.py`. Verifica con `python scripts/validate_plugin.py`.\r\n\r\n### Gemini CLI\r\n\r\n```\r\ngemini extensions install https://github.com/AlexPrietoRomani/project-suite\r\n```\r\n\r\nCarga las reglas como contexto siempre activo cada sesión y registra los comandos `/init`, `/nueva-fase`, `/modo`, `/review`, `/audit`, `/help`. Las skills se cargan cuando la tarea lo requiere. El adaptador de Gemini no incluye un `hooks/hooks.json` raíz: Gemini auto-carga esa ruta, y los hooks de lifecycle de project-suite usan los nombres de eventos de Claude Code.\r\n\r\n### Antigravity CLI\r\n\r\nAntigravity CLI (el binario `agy`) es la renombrbración de Gemini CLI; la misma extensión funciona ahí:\r\n\r\n```\r\nagy plugin install https://github.com/AlexPrietoRomani/project-suite\r\n```\r\n\r\nReutiliza el `gemini-extension.json` de este repo. Una diferencia: Antigravity convierte los comandos en skills, así que se escriben en el chat (ej. `/review` como mensaje) en vez de seleccionarlos de un menú de slash. Hasta que la migración se complete, `gemini extensions install` también funciona.\r\n\r\n## MCP servers\r\n\r\n| Server | Alcance | Por qué |\r\n|---|---|---|\r\n| `codegraphcontext` | Por defecto, global | Indexa el código local en un grafo (`uvx --with kuzu codegraphcontext mcp start`; auto-instala). En Windows usa **KuzuDB** — el backend por defecto (FalkorDB Lite) es solo-Unix. |\r\n| `context7` | *No se empaqueta* | Usa el server global que ya tengas — empaquetar un segundo causa desconexiones. |\r\n| `playwright` | Por proyecto (solo apps web/UI) | `init` lo agrega al `.mcp.json` del proyecto para los tests de simulación de usuario. |\r\n\r\n## Autoría\r\n\r\n`init` fija el autor de docs y commits desde tu identidad git (el usuario de GitHub conectado, si lo hay) o preguntándolo en repos locales — y lo persiste en `CLAUDE.md`/`AGENTS.md` para no volver a preguntar. **Sin coautoría LLM por defecto**: ningún commit lleva `Co-Authored-By` salvo que lo habilites explícitamente en esa sección o lo pidas.\r\n\r\n## Publicar en npm\r\n\r\nPara que `opencode` pueda resolver `@alexprietoromani/project-suite` desde el registry (igual que ponytail con `@dietrichgebert/ponytail`):\r\n\r\n```bash\r\n# 1. Login (una vez)\r\nnpm login\r\n\r\n# 2. Publicar\r\nnpm publish --access public\r\n```\r\n\r\nDespués, cualquier usuario puede instalar con:\r\n\r\n```json\r\n{ \"plugin\": [\"@alexprietoromani/project-suite\"] }\r\n```\r\n\r\nSi el paquete es privado, usa un registry interno y cambia `publishConfig.access` a `\"restricted\"` en `package.json`.\r\n\r\n## Agentes soportados\r\n\r\n| Agente | Estado | Instalación |\r\n|---|---|---|\r\n| Claude Code | ✅ | `/plugin marketplace add AlexPrietoRomani/project-suite` |\r\n| opencode | ✅ | `{ \"plugin\": [\"@alexprietoromani/project-suite\"] }` |\r\n| Gemini CLI | ✅ | `gemini extensions install https://github.com/AlexPrietoRomani/project-suite` |\r\n| Antigravity CLI | ✅ | `agy plugin install https://github.com/AlexPrietoRomani/project-suite` |\r\n| Codex | 🔜 Próximamente | Requiere `.codex-plugin/` |\r\n| Cursor / Windsurf | 🔜 Próximamente | Requiere `.cursor/rules/` y `.windsurf/rules/` |\r\n\r\n## FAQ\r\n\r\n**¿Puedo saltarme la planificación para algo trivial?**\r\nEl diseño no lo impide, pero la disciplina del plugin es \"planifica primero\" incluso para cambios chicos — el costo de una Fase de una Tarea es bajo comparado con el de código sin rastro de por qué existe.\r\n\r\n**¿Qué pasa si `verificar-dod` falla?**\r\n`construir` para esa rama, no marca el checkbox, y reporta qué item del DoD no pasó (test rojo, lint con warnings, cambio de DB sin documentar). Tú decides: corregir o replanificar.\r\n\r\n**¿Por qué los docs de trabajo (`plan/`, `task/`, `logs/`) no se versionan por defecto?**\r\nSon estado de proceso, no el contrato compartible del proyecto. La spec (`description`, `architecture`, `db`, `ejecucion`) sí se versiona siempre. Si trabajas en equipo y quieres compartir el plan, cambia `version_working_files` a `yes`.\r\n\r\n## Método\r\n\r\n7 plantillas encadenadas (`templates/`): `description_proyecto` → `architecture` → `diseno_db` → `plan_maestro` → `tareas` → `log` → `ejecucion`. Es una versión domain-specific, anclada a documentos, del flujo de `superpowers` (brainstorming → writing-plans → subagent-driven-development → TDD → verification).\r\n\r\n## Licencia\r\n\r\nMIT.\r\n","readmeFilename":"README.md"}