- Backend: claude -p --output-format stream-json - --resume para mantener contexto de conversación - Auto-connect al crear sesión - UI simplificada (botón + y logout) - Servicio systemd: captain-claude Siguiente paso: sesiones screen Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
3.4 KiB
3.4 KiB
Captain Claude Mobile - Estado del Proyecto
Fecha: 2026-01-17 Versión: v3.1 Estado: FUNCIONAL
Resumen
App móvil para chatear con Claude Code usando claude -p --output-format stream-json.
Arquitectura v3
Backend (captain_api_v3.py)
- Puerto: 3030
- Servicio systemd:
captain-claude - Método:
claude -p --output-format stream-json - Contexto:
--resume SESSION_IDmantiene historial de conversación - Auto-connect: Al crear sesión, se conecta automáticamente
- Almacenamiento: Sesiones en memoria (se pierden al reiniciar)
Flutter App
- APK:
260117_captain-claude-v3.1.apk - UI: Simplificada - botón + para nuevo chat, logout
- Conexión: WebSocket a
wss://captain.tzzrarchitect.me/ws/chat
API WebSocket
Mensajes del Cliente
{"token": "jwt"} // Autenticación
{"type": "create_session", "name": "Chat 1"} // Crear sesión
{"type": "message", "content": "hola"} // Enviar mensaje
{"type": "ping"} // Keep-alive
Respuestas del Servidor
{"type": "init", "sessions": [...]} // Estado inicial
{"type": "session_created", "session_id": "x", "name": "y"} // Sesión creada
{"type": "session_connected", "session_id": "x", "name": "y"} // Conectado
{"type": "output", "content": "..."} // Respuesta de Claude
{"type": "done", "session_id": "uuid"} // Respuesta completa
{"type": "error", "message": "..."} // Error
Archivos
apps/captain-mobile-v2/
├── backend/
│ ├── captain_api_v3.py # Backend actual
│ ├── captain-claude.service # Servicio systemd
│ └── test_*.py # Tests
├── flutter/
│ ├── lib/
│ │ ├── screens/chat_screen.dart
│ │ ├── providers/chat_provider.dart
│ │ ├── services/chat_service.dart
│ │ └── config/api_config.dart
│ └── build/app/outputs/flutter-apk/app-release.apk
└── ESTADO_PROYECTO.md
Comandos Útiles
# Estado del servicio
systemctl status captain-claude
# Logs
journalctl -u captain-claude -f
# Reiniciar
systemctl restart captain-claude
# Compilar APK
cd /home/architect/captain-claude/apps/captain-mobile-v2/flutter
/home/architect/flutter/bin/flutter build apk --release
# Subir a Nextcloud
/home/architect/bin/rclone copy build/app/outputs/flutter-apk/app-release.apk nextcloud-architect:app/
Siguiente Paso: Sesiones Screen
Objetivo
Crear versión capaz de:
- Listar sesiones screen existentes
- Conectarse a sesiones screen en tiempo real
- Crear nuevas sesiones screen con Claude Code
- Enviar input a sesiones activas
Diferencia
| v3 Actual | Screen Sessions |
|---|---|
claude -p por mensaje |
Proceso persistente en screen |
| Sesiones en memoria | Sesiones reales en servidor |
| Solo texto limpio | Output completo |
| Sin acceso a otras screens | Acceso a cualquier screen |
Implementación
- Backend v4 con endpoints para screen
- Parsing de output ANSI
- Flutter con selector de screens
Historial
- v3.1 (17/01/26): UI simplificada, auto-connect en backend
- v3.0 (17/01/26): Cambio a
claude -p --output-format stream-json - v2.x (17/01/26): Intentos con screen+hardcopy (descartado)