MCPcopy Index your code
hub / github.com/Neirth/OpenLobster

github.com/Neirth/OpenLobster @v0.4.1

Chat with this repo
repository ↗ · DeepWiki ↗ · release v0.4.1 ↗ · + Follow
6,352 symbols 18,357 edges 427 files 1,002 documented · 16%
What it actually does AI analysis from the code graph — generated when you open this
loading…
README

OpenLobster — Asistente de IA Personal

     <img src="https://placehold.co/800x200/0b6e4f/ffffff?text=OpenLobster&font=raleway" alt="OpenLobster" width="800">

Asistente de IA personal y auto-alojado — se ejecuta donde quieres, se conecta a los canales que usas.

EnglishEspañol简体中文

CI status GitHub release Docs GPLv3 License Discord GitHub Discussions

[!NOTE] ¿Migrando desde OpenClaw? Una guía de migración paso a paso está disponible en Discussions #44.

Un fork de OpenClaw elaborado con opinión que realmente aborda las cosas de las que la gente se ha estado quejando desde que el proyecto explotó.

OpenClaw tuvo su momento — agente de IA auto-alojado, mucho hype, crecimiento rápido. Luego la comunidad de seguridad le echó un vistazo y se puso feo muy rápido: un lote de CVE que llenó toda una página en RedPacket, y un mercado de habilidades (ClawHub) donde el 26% de las habilidades tenía al menos una vulnerabilidad. El sistema de memoria era un archivo MEMORY.md que explotaba con sesiones concurrentes. El "programador" (scheduler) era un demonio de latidos que se despertaba cada 30 minutos para leer una lista HEARTBEAT.md. El soporte multi-usuario era básicamente inexistente — la documentación literalmente decía "solo la sesión principal escribe en MEMORY.md, previniendo conflictos de sesiones paralelas" como si eso fuera una característica.

Este fork comenzó como un arreglo personal para todo eso y creció desde ahí.


Instalación Rápida (Local)

Ejecuta el siguiente comando para descargar el último binario e instalarlo como un servicio en segundo plano en tu máquina (soporta Linux/systemd, macOS/launchd y Windows/WSL2):

curl -sSL https://openlobster.app/install.sh | sh

Qué cambió (y por qué)

  • Memoria — MEMORY.md y una carpeta de archivos markdown no es un sistema de memoria, es una wiki. OpenLobster usa una base de datos de grafos adecuada (Neo4j) donde el agente construye nodos, bordes y relaciones tipificadas a medida que habla con las personas. Puedes navegar por ella y editarla desde la interfaz de usuario. También existe un backend de archivos para uso local que no requiere ejecutar Neo4j.

  • Multi-usuario — En OpenClaw, la memoria curada solo se cargaba en la "sesión privada, principal" y nunca en contextos de grupo. No existía el concepto de usuarios separados con historiales separados. Aquí, cada usuario a través de cada canal es una entidad de primera clase con su propio historial de conversación, sus propios permisos de herramientas y su propio flujo de emparejamiento (pairing). Un usuario de Telegram y un usuario de Discord pueden hablar con el mismo agente sin interferirse mutuamente.

  • Programador (Scheduler) — El bucle de latidos leyendo un archivo HEARTBEAT.md cada 30 minutos ha desaparecido. Hay un verdadero programador de tareas con expresiones cron para trabajos recurrentes y fechas/horas ISO 8601 para tareas únicas. El estado, las horas de próxima ejecución y los registros son visibles en el panel de control.

  • MCP — La integración MCP de OpenClaw era esencialmente una demo. OpenLobster se conecta a cualquier servidor HTTP MCP Streamable, maneja el flujo completo de OAuth 2.1, te permite navegar por las herramientas por servidor y te da una matriz de permisos por usuario para que controles exactamente qué puede hacer cada uno. También hay un mercado (marketplace) para integraciones de un clic.

  • Seguridad — Esta es la gran diferencia. OpenClaw se distribuyó con la autenticación desactivada por defecto, que es cómo terminas con 40,000 instancias expuestas en Censys. Aquí, la autenticación del panel de control está activada por defecto detrás de un token portador (OPENLOBSTER_GRAPHQL_AUTH_TOKEN). La configuración y los secretos se cifran en el disco. Las claves API y los tokens de los canales se almacenan en un backend de secretos (archivo cifrado u OpenBao), no en un YAML en texto plano. Las variables de entorno OPENLOBSTER_* nunca se filtran a herramientas de consola. ¿El CVE que permitía a llamadas no autenticadas golpear la API del agente directamente? No es una preocupación aquí.

  • Backend — OpenClaw era Node.js/TypeScript. Todo el backend ha sido reescrito en Go. Eso significa un único binario estático sin dependencia de tiempo de ejecución, inicio más rápido, menor uso de memoria y una API GraphQL adecuada a través de gqlgen. También hace que el despliegue sea significativamente más simple — sin npm, sin fijar de versión de Node, sin depender de `node_modules`.

  • UI — La interfaz web fue construida teniendo en cuenta su utilidad real. El primer inicio te lleva a un asistente de configuración de cero hasta tener un agente en ejecución sin tocar un archivo de configuración. La configuración es un formulario dinámico que se ajusta basándose en lo que habilitas — solo ves los campos que importan para tu situación. Todo lo que de otra manera necesitarías editar en YAML es accesible desde el navegador.

[!NOTE] Se necesitan contribuyentes Estoy pensando en añadir mantenedores a este repositorio. Lo estoy discutiendo en Discussions #68.

Stack

Capa Tecnología
Frontend SolidJS + Vite, CSS vanilla
Backend Go, GraphQL (gqlgen)
Base de Datos SQLite / PostgreSQL / MySQL
Memoria Archivo (GML) o Neo4j
Secretos Archivo encriptado o OpenBao
Canales Telegram, Discord, WhatsApp, Slack, Twilio SMS
IA OpenAI, Anthropic, Ollama, OpenRouter, Docker Model Runner, compatibles con OpenAI

Despliegue Rápido en la nube

Deploy to Azure Deploy to GCP Deploy to DigitalOcean (Ephemeral)

Despliegue en un clic — incluye configuración automática de Neo4j (Memoria) y Vault (Secretos).

Despliegue Manual

make build-prod

./dist/openlobster

El panel de control web estará en http://127.0.0.1:8080. En el primer inicio, el asistente de instalación te guiará con la configuración inicial. Las variables de entorno en .env o exportadas a tu shell se detectarán automáticamente.

Docker

Recomendado: usar un archivo .env para los secretos

docker run -p 8080:8080 \
  --env-file .env \
  -v ~/.openlobster/data:/app/data \
  -v ~/.openlobster/workspace:/app/workspace \
  -d ghcr.io/neirth/openlobster/openlobster:latest

Alternativamente, pásalos individualmente:

docker run -p 8080:8080 \
  -e OPENLOBSTER_GRAPHQL_AUTH_TOKEN=tu-token-secreto \
  -v ~/.openlobster/data:/app/data \
  -v ~/.openlobster/workspace:/app/workspace \
  -d ghcr.io/neirth/openlobster/openlobster:latest

Revisa .docker/ para ver los Dockerfiles disponibles (Dockerfile.basic para una build mínima, Dockerfile.static para un binario estático).

Configuración

La configuración vive en el panel principal bajo Herramientas, pero puedes definir todo por medio de variables de entorno con el prefijo OPENLOBSTER_. Viper los mapeara automáticamente (los puntos en las llaves YAML pasarán a guiones bajos).

# Ejemplo minimalista
OPENLOBSTER_AGENT_NAME=mi-agente
OPENLOBSTER_DATABASE_DRIVER=sqlite
OPENLOBSTER_DATABASE_DSN=./data/openlobster.db
OPENLOBSTER_GRAPHQL_AUTH_TOKEN=tu-token-secreto

# Proveedor IA (elige uno)
OPENLOBSTER_PROVIDERS_OLLAMA_ENDPOINT=http://localhost:11434
OPENLOBSTER_PROVIDERS_OLLAMA_DEFAULT_MODEL=llama3.2:latest

Referencia completa de variables de entorno

Variable Llave YAML Descripción
OPENLOBSTER_AGENT_NAME agent.name Nombre visible del agente
OPENLOBSTER_DATABASE_DRIVER database.driver sqlite, postgres, mysql
OPENLOBSTER_DATABASE_DSN database.dsn Cadena de conexión
OPENLOBSTER_DATABASE_MAX_OPEN_CONNS database.max_open_conns Conexiones máximas abiertas
OPENLOBSTER_DATABASE_MAX_IDLE_CONNS database.max_idle_conns Conexiones máximas inactivas
OPENLOBSTER_MEMORY_BACKEND memory.backend file o neo4j
OPENLOBSTER_MEMORY_FILE_PATH memory.file.path Ruta para el backend de archivo
OPENLOBSTER_MEMORY_NEO4J_URI memory.neo4j.uri ej. bolt://localhost:7687
OPENLOBSTER_MEMORY_NEO4J_USER memory.neo4j.user Usuario de Neo4j
OPENLOBSTER_MEMORY_NEO4J_PASSWORD memory.neo4j.password Contraseña de Neo4j
OPENLOBSTER_SECRETS_BACKEND secrets.backend file u openbao
OPENLOBSTER_SECRETS_FILE_PATH secrets.file.path Ruta para secretos de archivo
OPENLOBSTER_SECRETS_OPENBAO_URL secrets.openbao.url URL del servidor OpenBao
OPENLOBSTER_SECRETS_OPENBAO_TOKEN secrets.openbao.token Token de autenticación de OpenBao
OPENLOBSTER_PROVIDERS_OPENAI_API_KEY providers.openai.api_key Clave de OpenAI
OPENLOBSTER_PROVIDERS_OPENAI_MODEL providers.openai.model ej. gpt-4o
OPENLOBSTER_PROVIDERS_OPENAI_BASE_URL providers.openai.base_url URL base personalizada
OPENLOBSTER_PROVIDERS_OPENROUTER_API_KEY providers.openrouter.api_key Clave de OpenRouter
OPENLOBSTER_PROVIDERS_OPENROUTER_DEFAULT_MODEL providers.openrouter.default_model ej. openai/gpt-4o
OPENLOBSTER_PROVIDERS_OLLAMA_ENDPOINT providers.ollama.endpoint ej. http://localhost:11434
OPENLOBSTER_PROVIDERS_OLLAMA_DEFAULT_MODEL providers.ollama.default_model ej. llama3.2:latest
OPENLOBSTER_PROVIDERS_OLLAMA_API_KEY providers.ollama.api_key Autenticación opcional
OPENLOBSTER_PROVIDERS_ANTHROPIC_API_KEY providers.anthropic.api_key Clave de Anthropic
OPENLOBSTER_PROVIDERS_ANTHROPIC_MODEL providers.anthropic.model ej. claude-sonnet-4-6
OPENLOBSTER_PROVIDERS_OPENAICOMPAT_API_KEY providers.openaicompat.api_key Clave compatible con OpenAI
OPENLOBSTER_PROVIDERS_OPENAICOMPAT_BASE_URL providers.openaicompat.base_url URL base
OPENLOBSTER_PROVIDERS_OPENAICOMPAT_MODEL providers.openaicompat.model Nombre del modelo
OPENLOBSTER_PROVIDERS_DOCKER_MODEL_RUNNER_ENDPOINT providers.docker_model_runner.endpoint Endpoint de DMR
OPENLOBSTER_PROVIDERS_DOCKER_MODEL_RUNNER_DEFAULT_MODEL providers.docker_model_runner.default_model Modelo de DMR
OPENLOBSTER_GRAPHQL_ENABLED graphql.enabled Habilitar la API GraphQL
OPENLOBSTER_GRAPHQL_PORT graphql.port Por defecto 8080
OPENLOBSTER_GRAPHQL_HOST graphql.host Por defecto 127.0.0.1
OPENLOBSTER_GRAPHQL_BASE_URL graphql.base_url URL pública para callbacks de OAuth
OPENLOBSTER_GRAPHQL_AUTH_ENABLED graphql.auth_enabled Requerir token para el panel de control
OPENLOBSTER_GRAPHQL_AUTH_TOKEN graphql.auth_token Token portador (Bearer token)
OPENLOBSTER_LOGGING_LEVEL logging.level debug, info, warn, error
OPENLOBSTER_LOGGING_PATH logging.path Directorio de registros
OPENLOBSTER_WORKSPACE_PATH workspace.path Directorio del espacio de trabajo
OPENLOBSTER_CONFIG_ENCRYPT 1 (por defecto) encripta la config, 0 usa YAML normal

Canales

El agente habla con los usuarios dondequiera que ya estén. Habilita cualquier combinación en Ajustes (Settings) o a través de variables de entorno.

  • Telegram — Crea un bot con @BotFather, pega el token. Funciona en mensajes directos (DMs) y grupos.
  • Discord — Crea un bot en el Developer Portal, invítalo a tu servidor. Funciona en DMs y canales.
  • Slack — Aplicación en Socket Mode con un token de bot (xoxb-) y un token de app (xapp-).
  • WhatsApp — API de Negocios de WhatsApp (WhatsApp Business API) a través del Meta Business Suite.
  • Twilio SMS — SMS estándar a través de Twilio.

Documentación de usuario

La ca

Extension points exported contracts — how you extend this code

PluginPort (Interface)
PluginPort is the interface every loaded plugin must satisfy. The host communicates with plugins by calling exported fun [7 …
apps/backend/internal/domain/ports/plugin.go
Plugin (Interface)
(no doc) [14 implementers]
plugins/openlobster-sdk-base/src/runner.rs
PluginClient (Interface)
PluginClient is the interface consumed by smoke test runners. [3 implementers]
utils/validation_layer/src/protocol/client.go
DependencyConditionNode (Interface)
Dependency condition shape used in JSON Schema.
apps/frontend/src/components/SchemaForm/SchemaField.tsx
AIProviderPort (Interface)
500 [13 implementers]
apps/backend/internal/domain/ports/ai.go
PromSample (Interface)
Single sample returned by parse-prometheus-text-format
apps/frontend/src/hooks/useMetrics.ts
GraphQueryPort (Interface)
GraphQueryPort is the graph query interface for the dashboard. [16 implementers]
apps/backend/internal/domain/services/dashboard/dashboard_service.go
PromFamily (Interface)
Top-level metric family returned by parse-prometheus-text-format
apps/frontend/src/hooks/useMetrics.ts

Core symbols most depended-on inside this repo

Error
called by 254
apps/backend/internal/infrastructure/config/config.go
Error
called by 197
apps/backend/internal/domain/services/message_processor/message_processor_service.go
Len
called by 191
apps/backend/internal/domain/handlers/message_handler.go
renderWithQueryClient
called by 176
apps/frontend/src/test-utils.tsx
GormDB
called by 150
apps/backend/internal/infrastructure/persistence/database.go
ID
called by 121
apps/backend/internal/domain/ports/plugin.go
emit_log
called by 109
plugins/openlobster-sdk-base/src/rpc.rs
Close
called by 96
apps/backend/internal/domain/ports/plugin.go

Shape

Method 3,088
Function 2,316
Struct 646
Interface 179
Class 98
TypeAlias 18
FuncType 6
Enum 1

Languages

Go87%
Rust7%
TypeScript7%

Modules by API surface

apps/backend/internal/application/graphql/generated/generated.go1,194 symbols
apps/backend/internal/application/graphql/resolvers/resolver_test.go183 symbols
apps/backend/internal/domain/services/mcp/internal_tools_test.go177 symbols
apps/backend/internal/domain/services/mcp/internal_tools.go166 symbols
apps/backend/tests/integration/graphql_operations_test.go123 symbols
apps/backend/internal/application/graphql/resolvers/mappers/mappers_test.go115 symbols
apps/backend/internal/domain/ports/repositories.go86 symbols
plugins/openlobster-memory-gml/src/gml_serde.rs83 symbols
apps/backend/internal/application/graphql/dto/adapters_test.go81 symbols
apps/backend/internal/domain/services/dashboard/dashboard_test.go79 symbols
apps/backend/internal/application/graphql/generated/models_gen.go68 symbols
apps/backend/internal/application/graphql/resolvers/deps.go67 symbols

Datastores touched

dbDatabase · 1 repos
memDatabase · 1 repos
memdbDatabase · 1 repos
openlobsterDatabase · 1 repos
rtDatabase · 1 repos

For agents

$ claude mcp add OpenLobster \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact