dce725e69f
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
53 lines
2.8 KiB
Markdown
53 lines
2.8 KiB
Markdown
## Slash commands por project (namespaced)
|
|
|
|
Cada `projects/<p>/` puede tener su propio `.claude/commands/*.md`. Para invocarlos desde la raiz de `fn_registry` sin que pisen los comandos globales, se exponen via **symlink namespaced** en `fn_registry/.claude/commands/<project>/`.
|
|
|
|
### Patron canonico
|
|
|
|
```
|
|
projects/aurgi/.claude/commands/foo.md # archivo real (viaja con el sub-repo del project)
|
|
fn_registry/.claude/commands/aurgi -> symlink -> ../../projects/aurgi/.claude/commands
|
|
```
|
|
|
|
Resultado:
|
|
|
|
| cwd | Invocacion |
|
|
|---|---|
|
|
| `cd projects/aurgi && claude` | `/foo` (sin namespace) |
|
|
| `cd fn_registry && claude` | `/aurgi:foo` (namespaced, no colisiona con `/foo` global) |
|
|
|
|
Subdirs dentro de `.claude/commands/` se exponen como namespace en el slash command. Por eso `aurgi/foo.md` -> `/aurgi:foo`.
|
|
|
|
### Como anadir un project nuevo
|
|
|
|
1. `mkdir -p projects/<p>/.claude/commands/`.
|
|
2. Crear `<comando>.md` con frontmatter `description:` + cuerpo.
|
|
3. Symlink: `ln -sf ../../projects/<p>/.claude/commands /home/egutierrez/fn_registry/.claude/commands/<p>`.
|
|
4. Versionar el `.claude/commands/` del project en su propio sub-repo (NO en fn_registry — projects estan gitignored).
|
|
5. Versionar SOLO el symlink en fn_registry (`git add .claude/commands/<p>`).
|
|
|
|
### Reglas
|
|
|
|
- Cada project mantiene autonomia: sus commands viajan con el sub-repo y funcionan tanto en `cd projects/<p>` como desde la raiz.
|
|
- El symlink en fn_registry da acceso global con namespace — sin colision con commands del registry.
|
|
- NO duplicar contenido: archivo real solo en `projects/<p>/.claude/commands/`. fn_registry solo guarda el symlink.
|
|
- Si el project se mueve/elimina, borrar el symlink en fn_registry.
|
|
|
|
### Listado actual
|
|
|
|
| Project | Symlink | Commands disponibles desde fn_registry |
|
|
|---|---|---|
|
|
| aurgi | `.claude/commands/aurgi` | `/aurgi:aumentar_task`, `/aurgi:contexto_aurgi`, `/aurgi:anadir_contexto_aurgi` |
|
|
|
|
Anadir filas aqui al introducir un project nuevo con commands.
|
|
|
|
### Catalogo dinamico
|
|
|
|
Para listado en tiempo real (sin tener que actualizar esta tabla a mano): `/commands` escanea `.claude/commands/` recursivo y agrupa por namespace. Filtros: `/commands <substring>`, `/commands --ns <ns>`, `/commands --json`.
|
|
|
|
### Gotchas
|
|
|
|
- Claude Code lista los commands disponibles al inicio de sesion. Si un symlink apunta a un directorio inexistente, los commands no aparecen — verificar con `ls -L .claude/commands/<project>/`.
|
|
- El namespace usa el nombre del subdirectorio (`aurgi/`), no del project en `projects/`. Mantenerlos iguales para evitar confusion.
|
|
- Los commands del project se ejecutan con el cwd de la sesion actual. Un `/aurgi:aumentar_task` invocado desde `fn_registry/` corre con cwd `fn_registry/` — paths relativos en el `.md` deben asumir esto (siempre usar paths relativos al repo, ej. `projects/aurgi/vaults/...`).
|