Saltar al contenido principal

Wiedii — Crear un proyecto desde cero (checklist y consideraciones)

🎯 Guía para crear un proyecto/repositorio real desde cero: el paso a paso y qué tener en cuenta. Distinta del onboarding de práctica con el sandbox — para eso ver guia-nuevo-dev y repo-sandbox.

Instrucciones para agentes — AGENTS.md como fuente única​

Todo repositorio debe tener instrucciones para agentes en la raíz. Para no duplicar la misma configuración en cada herramienta de IA, se centraliza en un único archivo escrito a mano, AGENTS.md (estándar abierto que varias herramientas leen), y cada herramienta autorizada apunta a él en vez de repetir contenido. Esto reemplaza el patrón antiguo de un archivo propio "todo en uno".

Regla 1 — AGENTS.md es la única fuente, y solo contexto del proyecto​

AGENTS.md contiene solo lo específico del proyecto: qué hace el servicio, su dominio, comandos locales, particularidades y gotchas. No duplicar las convenciones de empresa (commits, branching, testing, seguridad, stacks…): ya las cargan solos los skills del plugin wiedii-dev, y repetirlas en cada repo genera deriva. Si una regla aplica a todos los repos, va en un skill (vía vault + /sync-skills), no en AGENTS.md.

Regla 2 — punteros solo a herramientas autorizadas​

Cada herramienta de IA autorizada apunta a AGENTS.md; la whitelist vive en conducta-ia (no se duplica aquí). Nunca crear config de herramientas fuera de la whitelist (.cursorrules, .windsurfrules, .github/copilot-instructions.md, etc.): el .gitignore ya las ignora a propósito y audit-project FALLA si quedan trackeadas. Ignorarlas no las autoriza.

Regla 3 — CODEMASTER.md y monolitos "todo en uno" están deprecados​

El archivo propio que centralizaba todo (CODEMASTER.md y similares, de antes de skills/plugins) queda deprecado: ningún tool lo lee de forma nativa y duplica lo que hoy dan los skills. Migración: mover lo específico del proyecto a AGENTS.md, dejar los punteros, y borrar CODEMASTER.md.

Regla 4 — los archivos "community-health" de GitHub no son canónicos​

Los documentos canónicos de un repo Wiedii son README.md, CONTRIBUTING.md, AGENTS.md y CLAUDE.md (más los punteros de herramientas autorizadas). Los repos son internos/privados (license: UNLICENSED), así que los community-health files de GitHub — pensados para proyectos open-source públicos — no aplican al modelo de Wiedii:

  • CODE_OF_CONDUCT.md
  • SECURITY.md
  • .github/ISSUE_TEMPLATE/ y .github/PULL_REQUEST_TEMPLATE.md
  • .github/FUNDING.yml
  • CODEOWNERS (las aprobaciones se cubren con la política operativa + branch protection — ver branch-protection)

No son obligatorios y, si aparecen (arrastrados de una plantilla o autogenerados), se tratan igual que CODEMASTER.md: no canónicos → considerar eliminar. La regla general es "documento no canónico en Wiedii → WARN 'considerar eliminar'" (no un FAIL duro): /audit-project y /review-pr lo marcan como aviso cuando lo encuentran trackeado, para que el equipo decida. La única plantilla de MR que sí usamos es la de GitLab: .gitlab/merge_request_templates/default.md.

Regla 5 — configs muertas del tooling de commits (post-wietoo)​

Tras migrar a wietoo (validación de commits nativa, sin Node), los archivos de configuración del tooling viejo quedan muertos y deben eliminarse: commitlint.config.{js,cjs,mjs} y su compañero changelog.config.js (más las devDependencies @commitlint/*, cz-git, czg y el script "commit": "czg" de package.json). Ver wietoo-cli. Si alguno sigue trackeado en un repo ya migrado → WARN "considerar eliminar" en /audit-project / /review-pr (mismo trato que CODEMASTER.md): es peso muerto, ningún hook los invoca ya. La config viva y opcional de commits es wietoo.toml (solo si el repo define scopes propios), no un commitlint.config.

package.json / node_modules / bun.lock en repos que NO son JS/TS. Muchos repos (Go, Python, Terraform, solo-docs) arrastraban un package.json cuyo único propósito era sostener czg/commitlint. Post-wietoo eso es peso muerto (tiempo de bun install, superficie de Renovate, tamaño del repo). Regla para /audit-project / /review-pr → WARN "considerar eliminar el package.json/node_modules/bun.lock" solo si todas estas son ciertas (criterios): dependencies vacío o inexistente; scripts sin nada más que un alias de commits ("commit": "czg" y similares); ningún .js/.ts que el repo realmente ejecute; ningún job de CI que use bun install/bun run salvo el tooling de commits. Si alguna es falsa (código JS/TS real, deps de runtime, scripts propios como los bun run scripts/*.ts) → el repo sí es JS/TS: mantener package.json y solo quitar las 4 devDependencies de commits. ⚠️ [[bun|bun]] en mise.toml NO se quita aunque el repo deje de ser JS/TS: el hook renovate-validate de wiedii-configs usa bunx para validar renovate.json en cualquier stack.

Contenido mínimo de AGENTS.md​

# Project Name — Agent Instructions

## Setup
```bash
mise trust && mise run setup # fresh clone: trust first — mise won't run tasks from an untrusted config
```

## Stack
- Runtime: Node.js
- Package manager: Bun
- Framework: [Astro / etc.]
- Language: TypeScript

## Commands
- Lint: `bun eslint .`
- Type check: `bun tsc --noEmit`
- Test: `bun test`
- Build: `bun run build`
- Commit: `wietoo commit`

## Conventions
Company-wide conventions (commits, branching, testing, security, stack policies) come from the `wiedii-dev` skills — do **not** restate them here. Source: [[politicas-core]].

## Code Discovery Protocol
Use codebase-memory-mcp tools first for code exploration: search_graph, trace_path, get_code_snippet, query_graph, get_architecture, search_code. If the project isn't indexed yet, run index_repository first.

Punteros desde las herramientas autorizadas​

CLAUDE.md no repite el contenido: importa AGENTS.md y añade solo lo propio de Claude Code (bloque [[engram|Engram]], instrucciones que inyecta [[codebase-memory-mcp]]):

# Project Name — Claude Code

@AGENTS.md

## Memory (Engram)
<!-- bloque Engram obligatorio — ver abajo -->

Actualizado 2026-07-15: Claude Code y Cowork son las únicas herramientas de IA autorizadas (ver [[politicas-core]] regla #2) — ambas usan el puntero CLAUDE.md de arriba. Codex, Antigravity CLI y el IDE Kiro quedaron fuera de la lista blanca; si un repo conserva sus punteros (.kiro/steering/, el context file de Antigravity, etc.), retirarlos.

Convención de nombres​

Antes de crear el repo en GitLab, definir:

  • Project name (nombre visible): Title Case con espacios — ej. Wiedii Configs, Renovate Runner
  • Project path (URL / slug): kebab-case — ej. wiedii-configs, renovate-runner

GitLab pre-rellena el path en kebab-case al escribir el nombre — el path generado automáticamente suele ser correcto. Solo ajustar el Project name a Title Case con espacios si GitLab lo rellenó de otra forma. Ver [[gitlab-naming]] para la política completa y excepciones (Homebrew tap).

Servidores LSP (.lsp.json)​

Cada repo nuevo debe tener un .lsp.json en la raíz, podado según el stack detectado (Go → gopls; TypeScript/Bun → vtsls; Python → basedpyright-langserver; PHP queda fuera — corre en el dev container, ver [[stack-tecnologico]]).

Por qué a nivel de repo y no basta con el del plugin. El plugin wiedii-dev ya declara su propio .lsp.json baseline, y según la documentación de plugins de Claude Code eso debería activarse automáticamente en cualquier repo que instale el plugin — pero se observó empíricamente que no ocurre de forma confiable en repos consumidores (squadlinx-frontend: el vtsls del plugin nunca arrancó, corrió el LSP por defecto de Claude Code en su lugar; causa raíz sin confirmar). Por eso se scaffoldea un .lsp.json a nivel de repo — la ubicación documentada que sí funciona de forma confiable — y es en todo caso necesario para el tuning específico del repo que un baseline genérico de plugin nunca puede saber (ver [[stack-tecnologico]] para el caso de los build tags de Go).

Generación. Se genera con un script bundleado en la skill repo-setup (scripts/scaffold-lsp-json.ts), que detecta el stack (go.mod/package.json/pyproject.toml) y emite el JSON podado. Sin stack reconocido → no se crea el archivo (no es un hallazgo, mismo trato que las secciones por-lenguaje de .editorconfig).

Riesgo aceptado. Claude Code no documenta qué pasa cuando un .lsp.json de repo y uno de plugin declaran la misma extensión (solo se sabe que "el primer servidor registrado gana, los demás no arrancan") — riesgo conocido, no bloqueante, sin resolver aquí.


Checklist de nuevo repositorio​

Usar este checklist cada vez que se configura o clona un nuevo repositorio:

Setup inicial​

  • Clonar bajo ~/Docker/ con la carpeta llamada igual que el Project path del repo (kebab-case, mismo slug) — ver [[gitlab-naming#Carpeta local del proyecto]]
  • git flow init --preset=classic --defaults
  • Quitar el prefijo v de los tags (regla SemVer sin prefijo): git config gitflow.branch.release.tagprefix "" y git config gitflow.branch.hotfix.tagprefix "" — ver [[git-flow#Inicialización (una vez por clon del repo)]]
  • Primer commit: git commit -m "chore: initial commit" (antes de cualquier otro commit)
  • Crear .gitignore (plantilla del stack + globales de SO para Windows/Linux/macOS)
  • Crear .gitattributes con configuración de line endings cross-platform
  • Ejecutar git add --renormalize . si el repo ya tenía archivos
  • Crear .editorconfig
  • Crear .lsp.json (condicional por stack detectado — ver «Servidores LSP» más abajo)
  • Crear mise.toml con todas las herramientas binarias (bun, lefthook, taplo, hadolint, shfmt, shellcheck + específicas del stack)
  • (Opcional) Crear .taplo.toml si el proyecto usa taplo fuera del hook: extensión VS Code, taplo fmt manual o CI sin lefthook (ver [[linters#TOML]])

Instalación de herramientas​

  • mise trust && mise run setup (en un clon nuevo mise trust va antes — mise no corre tareas de un config no confiable; mise install instala herramientas + registra hooks via [hooks].postinstall; bun install corre solo si hay package.json)
  • Verificar hooks: lefthook run pre-commit (debe pasar en repo limpio)

Renovate (actualizaciones automáticas de dependencias)​

  • Crear renovate.json en la raíz del repo con el preset compartido:
    {
    "$schema": "https://docs.renovatebot.com/renovate-schema.json",
    "extends": ["local>wildcat/renovate-runner//.gitlab/renovate.json"]
    }
    Sin este archivo el runner de Renovate ignora el repositorio. Ver [[renovate]] para overrides y troubleshooting.

Metadatos de package.json​

Todo package.json de Wiedii debe incluir estos campos de identificación:

{
"name": "nombre-del-proyecto",
"version": "0.1.0",
"private": true,
"description": "Una línea en inglés describiendo el propósito del proyecto",
"keywords": ["palabra-clave-1", "palabra-clave-2"],
"repository": {
"type": "git",
"url": "https://gitlab.wiedii.co/<namespace>/<repo>.git"
},
"license": "UNLICENSED",
"author": "Wiedii Authors"
}
CampoValorNotas
namekebab-caseSin scope para repos internos; @wiedii-registry/nombre solo para paquetes publicados en el registro privado
versionSemVer exacto0.1.0 para proyectos nuevos, 1.0.0 al salir a producción
privatetrue siempreEvita publicación accidental en npm
descriptionUna línea, en inglésAparece en GitLab, herramientas de búsqueda y agentes
keywordsArray de stringsFacilita búsqueda y clasificación
repository.urlURL completa de GitLabFormato: https://gitlab.wiedii.co/<namespace>/<repo>.git
license"UNLICENSED" siemprePropietario — todos los derechos reservados a Wiedii
author"Wiedii Authors"Identifica el proyecto como propiedad de Wiedii

"UNLICENSED" es el estándar npm para software propietario: significa que nadie tiene permiso de usar, copiar ni distribuir el código sin autorización explícita de Wiedii. No confundir con "PROPRIETARY" (no reconocido por npm) ni dejar el campo vacío.

  • Verificar que package.json incluye todos los campos de metadatos antes del primer commit

Herramientas de commit​

  • wietoo declarado en mise.toml (parte del setup estándar — ver [[wietoo-cli#Cómo se activa wietoo en un proyecto nuevo]])
  • lefthook.yaml con el remote de [[wiedii-configs]] incluyendo lefthook/base.yaml (activa el hook commit-msg con wietoo)
  • (Opcional) Crear wietoo.toml con wietoo init si el proyecto necesita scopes propios — ver [[wietoo-cli#Personalizar los scopes del proyecto (wietoo.toml)]]

Linters (por stack)​

  • JS/TS: ESLint flat config (eslint.config.mjs) + Prettier + tsconfig.json en strict
  • Python: ruff + mypy en mise.toml
  • Go: golangci-lint en mise.toml
  • CSS: Stylelint

CI/CD (GitLab)​

  • Crear un request en [[squadlinx|Squadlinx]] al equipo de Infra solicitando la configuración del pipeline para el proyecto (ver [[ci-arquitectura]])
  • Confirmar que GitLab → Settings → CI/CD → General pipelines apunta al repo de infra
  • Verificar que los escáneres de seguridad están activos en el pipeline (ver [[security-scanners]])

Configuración del repositorio (GitLab CE)​

  • Branch protection en main y develop (requerir MR + 1 aprobación + status checks)
  • GitLab → Settings → Merge requests: solo merge commits, squash/rebase desactivados
  • renovate.json existe en la raíz con "extends": ["local>wildcat/renovate-runner//.gitlab/renovate.json"] (ver [[renovate]])
  • .gitlab/merge_request_templates/default.md creado

README.md​

  • Crear README.md en la raíz: descripción del proyecto, setup (mise run setup), uso y comandos clave
    • En inglés y español (regla #9 de [[politicas-core]])
    • Referenciar CONTRIBUTING.md desde el README

CONTRIBUTING.md​

  • Crear CONTRIBUTING.md (inglés, canónico) en la raíz usando la plantilla [[tpl-contributing]]
    • Sustituir PROJECT_NAME y <namespace> con los valores del proyecto
    • Ajustar la sección de hooks según el stack (JS, Python, Go)
    • Verificar que la sección Definition of Done refleja los requisitos reales del proyecto
  • Crear CONTRIBUTING.es.md como archivo independiente (traducción al español) con navegación recíproca (enlace de ida y vuelta en el encabezado). No es un único archivo combinado: son dos archivos, CONTRIBUTING.md (EN) + CONTRIBUTING.es.md (ES). Ver [[contributing]] y [[documentacion-bilingue]] (inglés canónico + español en archivo aparte, con marcador anti-drift <!-- synced-with: CONTRIBUTING.md @ <sha> -->).

Instrucciones para agentes​

  • AGENTS.md creado como fuente única — solo contexto del proyecto (setup, stack, comandos, gotchas); sin duplicar convenciones de empresa (las dan los skills)
  • Punteros desde herramientas autorizadas: CLAUDE.md (@AGENTS.md + bloque [[engram|Engram]]) — y ninguna config de herramientas no autorizadas (incl. Codex, Antigravity CLI, Kiro — desautorizados 2026-07-15)
  • Sin CODEMASTER.md ni monolitos "todo en uno" (deprecados → migrar a AGENTS.md y borrar)
  • CONTRIBUTING.md referenciado desde README.md y CLAUDE.md
  • mise run setup documentado como comando único de setup

Knowledge graph (codebase-memory-mcp)​

codebase-memory-mcp acelera el trabajo de agentes IA: extracción determinista vía tree-sitter (sin LLM, sin costo de tokens) y consulta estructural/semántica sobre un grafo SQLite por repositorio. El servidor MCP es global (una instalación por máquina); los índices viven fuera del repo (~/.cache/codebase-memory-mcp/) — no hay artefacto que gitignorear ni invocación de skill que recordar.

  • Confirmar que el servidor ya está registrado globalmente (claude mcp list → codebase-memory); si no, instalarlo una vez por máquina (ver [[02-herramientas/codebase-memory-mcp]])
  • index_repository (mode full) — indexar el repo la primera vez, tras mise run setup
  • Confirmar que Claude usa el grafo primero (search_graph/trace_path/get_architecture) en vez de grep por cada archivo — ver el "Code Discovery Protocol" en la plantilla de CLAUDE.md de arriba

Reemplaza a [[graphify]] (decisión 2026-07-15) — ver [[02-herramientas/codebase-memory-mcp#Reemplazo de graphify: mecanismo y costo]] para el detalle de la migración.

Herramientas de Claude Code (artefactos locales)​

Las herramientas de IA que Claude Code usa generan artefactos locales que nunca deben commitearse — son regenerables y no aportan valor al historial de Git.

HerramientaCarpeta generadaQué contiene
[[graphify]]graphify-out/Knowledge graph del codebase (.md + índices)
[[playwright-mcpPlaywright MCP]].playwright-mcp/
Claude Code settings.claude/Configuración local del agente, permisos, hooks

Ver [[cross-platform#6. Project-specific]] para el bloque canónico de artefactos de herramientas IA (fuente única). Agregarlo al final del .gitignore:

### Project-specific — AI tool artifacts (regenerables, never commit) ###
.claude/
graphify-out/
.playwright-mcp/
.context7/
  • Verificar que .claude/, graphify-out/, .playwright-mcp/ y .context7/ están en .gitignore

Ver [[playwright-mcp]] para documentación completa del MCP y casos de uso de testing visual. Ver [[graphify]] para el knowledge graph.


Verificar que todo funciona​

  • Clone limpio → mise trust && mise run setup → wietoo commit → push → MR → CI verde
  • git config --global merge.ff retorna false
  • Todos los hooks de pre-commit corren sin errores