--- id: "0109g" title: "skill_tree: panel terminal embebida (claude TUI dentro de la app)" status: pendiente type: feature domain: - meta - cpp-stack scope: app-scoped priority: baja depends: - "0109b" blocks: [] related: - "0109" created: 2026-05-17 updated: 2026-05-17 tags: - skill-tree - cpp - imgui - terminal - pty --- # 0109g — Terminal embebida en skill_tree Hoy el boton `Claude fix` lanza terminal externa (Windows Terminal). Funciona pero saca al usuario fuera de la app. Issue: integrar terminal completa dentro de skill_tree como panel. ## Opciones a evaluar ### Opcion 1: lib externa ImGui terminal - **ImTerm** (github.com/Optiroc/ImTerm): minimalista, sin PTY. NO sirve para TUI. - **imgui-console**: similar, comandos hardcoded. NO sirve. - **imgui-vt100** o forks: emuladores ANSI dentro de ImGui. Algunos con PTY. Investigar: - github.com/Magenta-Inc/MagentaImGuiTerminal - github.com/microsoft/terminal — ConPTY API + custom UI - github.com/jbrd/imterm — soporta escape sequences basicas - Riesgo: claude usa **alt screen + raw mode + bracketed paste + colores 24-bit + cursor moves**. La mayoria de libs no cubren todo. ### Opcion 2: PTY + parser ANSI propio - Linux: `openpty()` + fork + exec claude. Buffer texto. Parser ANSI minimo (CSI, SGR, cursor). - Windows: ConPTY (`CreatePseudoConsole`). Similar. - Render ImGui con `AddText` + colores por celda. Soportar redimension via `TIOCSWINSZ`. - Mucho trabajo (~1500 LOC). Resultado limitado (no soporta TUIs complejas tipo less, vim). ### Opcion 3: Pipe simple (no TUI) - spawn `claude --print "..."` con un prompt y leer stdout en panel scrollable. - NO interactivo. Solo one-shot. - Util para `Generate ideas` (0109h), NO para `Claude fix` interactivo. ## Recomendacion - **Corto plazo**: dejar terminal externa (esta hecha en 0109b3). - **Medio plazo**: hacer Opcion 3 (pipe one-shot) para 0109h. - **Largo plazo**: Opcion 2 (ConPTY/openpty propio) solo si el usuario lo pide explicitamente. Es trabajo de semana y limitara la app a un emulador de calidad mediocre. ## Investigacion previa (sub-issue 0109g1) Antes de implementar, abrir sub-issue 0109g1 que evalua: - ¿Hay alguna lib **imgui-pty** madura en 2026? - ¿La calidad de `imgui-vt100` cubre claude TUI? - ¿Cuanto cuesta ConPTY/openpty propio para soportar al menos: scrollback, colores 24-bit, cursor moves, alt screen, bracketed paste? Si la respuesta a (1) o (2) es "si", saltar a implementar. Si la respuesta es "no", el esfuerzo de (3) probablemente no compensa vs la terminal externa. ## DoD (cuando se implemente) - [ ] Panel "Terminal" toggable desde menu View (Ctrl+3). - [ ] Spawn `claude --dangerously-skip-permissions` en cwd `~/fn_registry`. - [ ] Input box manda chars al PTY. - [ ] Output renderizado con colores ANSI minimo. - [ ] Cierre limpio del proceso al cerrar el panel o salir de la app. - [ ] Funciona en Windows nativo (no requiere WSL terminal externa). ## Anti-DoD - NO soporta TUIs muy complejas (less con keyboard, vim) hasta que se justifique con un user need real.