diff --git a/README.md b/README.md
index 81fbaeb..aae5bf6 100644
--- a/README.md
+++ b/README.md
@@ -137,6 +137,21 @@ Ejecuta los tests del plugin. Opcionalmente especifica la ruta de FacturaScripts
#### `fsmaker zip`
Genera un archivo ZIP del plugin listo para distribución.
+#### `fsmaker web`
+Inicia una interfaz web local para ejecutar comandos de fsmaker desde el navegador.
+
+```bash
+fsmaker web
+```
+
+Opciones útiles:
+
+```bash
+fsmaker web --port=8788
+fsmaker web --host=0.0.0.0 --no-open
+FSM_HOST=0.0.0.0 FSM_PORT=8788 fsmaker web
+```
+
## ✅ Requisitos
- PHP 8.1 o superior
@@ -223,6 +238,14 @@ cd MiPlugin/
fsmaker zip
```
+### Usar interfaz web local
+```bash
+cd MiPlugin/
+fsmaker web
+# abre http://127.0.0.1:8787 por defecto, configurable con --host/--port o FSM_HOST/FSM_PORT
+# en "Respuestas" escribe una por línea en orden de los prompts
+```
+
### Ejecutar con mayor verbosidad
```bash
fsmaker model -v # Verbose
@@ -233,4 +256,4 @@ fsmaker model -vvv # Debug
## 📞 Issues / Feedback
- 💬 **Contacto**: https://facturascripts.com/contacto
-- 🐛 **GitHub**: https://github.com/facturascripts/fsmaker
\ No newline at end of file
+- 🐛 **GitHub**: https://github.com/facturascripts/fsmaker
diff --git a/composer.json b/composer.json
index db66453..d116e81 100644
--- a/composer.json
+++ b/composer.json
@@ -29,7 +29,8 @@
"ext-mbstring": "*",
"ext-ctype": "*",
"laravel/prompts": "^0.3.10",
- "symfony/console": "^6.4 || ^7.0"
+ "symfony/console": "^6.4 || ^7.0",
+ "symfony/http-foundation": "^7.4"
},
"bin": ["bin/fsmaker"],
"require-dev": {
diff --git a/src/Command/Web/WebCommand.php b/src/Command/Web/WebCommand.php
new file mode 100644
index 0000000..e99f163
--- /dev/null
+++ b/src/Command/Web/WebCommand.php
@@ -0,0 +1,54 @@
+addOption('host', null, InputOption::VALUE_REQUIRED, 'Host', getenv('FSM_HOST') ?: '127.0.0.1')
+ ->addOption('port', null, InputOption::VALUE_REQUIRED, 'Puerto', getenv('FSM_PORT') ?: '8787')
+ ->addOption('no-open', null, InputOption::VALUE_NONE, 'No abrir navegador');
+ }
+
+ protected function execute(InputInterface $input, OutputInterface $output): int
+ {
+ $host = (string) $input->getOption('host');
+ $port = (int) $input->getOption('port');
+ $router = dirname(__DIR__, 3) . '/src/Web/router.php';
+
+ if (!file_exists($router)) {
+ $output->writeln('