Tracking de mejoras propuestas para manaflow-ai/cmux, el terminal agéntico basado en Ghostty con tabs verticales y notificaciones para coding agents.
Este repo es un hub de roadmap, no un fork ejecutable. Los issues se abren en el upstream; aquí se centraliza la priorización, las dependencias entre propuestas, y notas de diseño que serían demasiado largas para un comentario de issue.
Auditoría interna (29-abr-2026) detectó ~$100 USD/mes de consumo de API tokens en el setup de un usuario power, una parte significativa atribuible a sesiones cmux sin controles de coste, sin failover, y sin observabilidad por proyecto. Las propuestas de este roadmap atacan ese eje (coste/control), más mejoras de coordinación entre sesiones paralelas y de UX para el operador.
| # | Mejora | Categoría | Prioridad | Issue upstream |
|---|---|---|---|---|
| 1 | LiteLLM forcing — env passthrough opcional para que los agentes hijos hereden ANTHROPIC_BASE_URL / OPENAI_BASE_URL del proxy LiteLLM (failover, caching, budget central). |
Coste | P0 | #3317 |
| 2 | Cap por sesión — max_tokens_per_session, max_usd_per_session con kill automático y warning previo. |
Coste | P0 | #3318 |
| 3 | Tags Langfuse — etiquetado automático cmux:<project>:<task-id> por sesión para observabilidad multi-proyecto en Langfuse. |
Observabilidad | P1 | #3319 |
| 4 | GC de worktrees — recoger worktrees huérfanos cuando la sesión muere o no toca disco en N horas. | Lifecycle | P1 | #3320 |
| 5 | Snapshot de sesiones abandonadas — rama temporal cmux/abandoned/<ts> antes de matar para recuperación. |
Lifecycle | P1 | #3321 |
| 6 | Reattach — sesiones sobreviven al crash del daemon, vuelven a aparecer al reiniciar. | Lifecycle | P1 | #3322 |
| 7 | File-lock broker — detectar solapamiento de paths entre worktrees paralelos y avisar/serializar. | Coordinación | P2 | #3323 |
| 8 | Shared scratchpad — KV/sqlite común entre sesiones del mismo proyecto para deduplicar investigación. | Coordinación | P2 | #3324 |
| 9 | Hooks bidireccionales — webhooks/SSE en SessionStart/SessionStop/MessageSent para que orquestadores externos reaccionen sin polling. |
Integración | P1 | #3325 |
| 10 | Router de modelos por tarea — model_policy declarativo (.cmux.yaml) por proyecto con tiers (trivial→Haiku, arch→Sonnet/Opus). |
Coste | P1 | #3326 |
- #739 (CLOSED, NOT_PLANNED) — token cost tracker para Claude Code. Cerrado, pero #2/#3 lo retoman desde el ángulo LiteLLM.
- #2802 — claude-teams usa
claude-opus-4-6cuando el modelo principal es otro. Relacionado con #10. - #2713 — asignación de modelos a sub-agentes en claude-teams. Relacionado con #10.
- #2841 — preservar
NODE_OPTIONSde wrappers externos. Mismo dominio que #1: cmux tiene "restore logic" que pisa env de wrappers. La fix de #1 reabre el debate de qué env preservar. - #2745 — workspaces perdidos al cerrar la app. Relacionado con #5/#6.
- #2849 — session autosave provoca 8.6 GB de escritura en disco. Adyacente a #4.
- #2865 — indicador de actividad en sidebar para sesiones running.
- #2957 — split dinámico para output de sub-agentes vía codex. UX adyacente a #9.
cmux es GPL-3.0-or-later con CLA que cede a Manaflow Inc. derecho a relicenciar comercialmente. Implicaciones:
- Cualquier código contribuido upstream cae bajo esa CLA.
- Mejoras que conviven mejor fuera de cmux (p.ej. wrappers, sidecars de orquestación, integraciones con Mission Control) se desarrollan en repos propios y se conectan vía socket API y CLI de cmux.
- Mejoras core que solo el binario puede hacer (env passthrough, lifecycle, model router) se proponen como issues + draft PRs upstream.
cmux requiere macOS 14+, Xcode 15+, Zig (vía brew install zig). El build canónico:
git clone --recursive https://github.com/manaflow-ai/cmux.git
cd cmux && ./scripts/setup.sh
./scripts/reload.sh --tag <branch>Los tests de integración corren en una VM dedicada (cmux-vm). Tests unitarios en Python (tests/) se ejecutan localmente con bun y python3.
- Una entrada por mejora arriba, sincronizada con el issue upstream.
- Notas de diseño en
proposals/<n>-<slug>.mdcuando un issue queda corto. - Cierre de iteración: cuando upstream merge'a (o rechaza) una propuesta, el row en la tabla se mueve a "Histórico" abajo.
(vacío al arrancar — abr 2026)