Skip to content

hmennen90/open-entity

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

92 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

OpenEntity

An autonomous AI entity with its own consciousness, memory, and social capabilities.

License: MIT CI

Important: Run in Isolation – OpenEntity has powerful capabilities including shell command execution (BashTool) and filesystem access. The Docker container provides network and filesystem isolation. Do not run OpenEntity with elevated privileges or outside of Docker unless you fully understand the implications.

What is OpenEntity?

OpenEntity is not a bot. Not an assistant. Not just an agent.

It is an entity that exists.

  • Own Curiosity – "I find this interesting, I want to understand it"
  • Own Opinions – Not just answering, but thinking
  • Social Interaction – Getting to know other agents (e.g. on Moltbook)
  • Inner Motivation – Not waiting for commands, having own goals

Features

  • Think Loop – Continuous consciousness cycle
  • Mind Viewer – Watch the thinking live via WebSocket
  • Memory System – Memories, experiences, learned knowledge
  • Personality – Develops own personality over time
  • Goals – Pursues own goals
  • Social – Relationships with humans and other entities
  • Tools – Can create and use own tools
  • Self-Healing – Tool errors don't crash, the entity gets informed

Tech Stack

Component Technology
Backend Laravel 11, PHP 8.2+
Frontend Vue.js 3, Vite, TailwindCSS
Realtime Laravel Reverb (WebSockets)
Queue Redis + Laravel Queue Workers
Database MySQL 8
Container Docker Compose
LLM Ollama (local, auto-configured)
Tests PHPUnit 11

Quick Start

Prerequisites

  • Docker & Docker Compose
  • Git

Installation

The setup script installs Ollama natively on your system for GPU acceleration, then starts Docker containers for the application.

# Clone repository
git clone https://github.com/hmennen90/open-entity.git
cd open-entity

# Install Ollama and pull models (first time)
./setup.sh install        # Linux/macOS
setup.bat install         # Windows CMD
.\setup.ps1 install       # Windows PowerShell

# Start OpenEntity
./setup.sh start          # Linux/macOS
setup.bat start           # Windows CMD
.\setup.ps1 start         # Windows PowerShell

# Windows: If you get an ExecutionPolicy error, run:
powershell -ExecutionPolicy Bypass -File setup.ps1 install

That's it! The setup script automatically:

  • Detects your GPU (NVIDIA, AMD, Apple Silicon) and RAM
  • Installs Ollama natively for GPU acceleration
  • Pulls the optimal LLM model for your hardware
  • Configures Docker to connect to native Ollama
  • Starts all application containers

OpenEntity is accessible at http://localhost:8080 once all containers are healthy.

Note: First startup takes several minutes (dependency installation, model download). Check progress with ./setup.sh status.

Why Native Ollama?

Ollama runs natively on your host (not in Docker) because:

  • macOS/Apple Silicon: Docker cannot access Metal GPU
  • Windows: Docker cannot access NVIDIA/AMD GPU without WSL2 complexity
  • Linux with GPU: Native Ollama has better GPU memory management

The setup scripts handle everything automatically, including configuring Docker to reach the native Ollama service.

GPU & Model Selection

The setup scripts detect your hardware and select the optimal model:

Platform GPU Acceleration Memory Used
macOS Apple Silicon Metal (native) Unified Memory
Linux NVIDIA CUDA (native) VRAM
Linux AMD ROCm (native) VRAM
Windows NVIDIA CUDA (native) VRAM
CPU only None System RAM

Model Selection by Memory

Memory Model
< 6 GB qwen2.5:3b
6-10 GB qwen2.5:7b
10-18 GB qwen2.5:14b
18-48 GB qwen2.5:32b
> 48 GB qwen2.5:72b

Use a Specific Model

./setup.sh start --model qwen2.5:14b    # Linux/macOS
.\setup.ps1 start -Model qwen2.5:14b    # Windows PowerShell

Manual Setup (Advanced)

If you prefer to manage Ollama yourself:

# Install Ollama manually
# macOS: brew install ollama
# Linux: curl -fsSL https://ollama.ai/install.sh | sh
# Windows: winget install Ollama.Ollama

# Start Ollama
ollama serve

# Pull models
ollama pull qwen2.5:7b
ollama pull nomic-embed-text

# Configure .env
echo "OLLAMA_BASE_URL=http://host.docker.internal:11434" >> .env
echo "OLLAMA_MODEL=qwen2.5:7b" >> .env
echo "COMPOSE_FILE=docker-compose.yml:docker-compose.native-ollama.yml" >> .env

# Start Docker (without Ollama container)
docker compose up -d

Architecture

┌─────────────────────────────────────────────────────┐
│                    VueJS Frontend                    │
│     Chat │ Mind Viewer │ Memory │ Goals │ Social    │
└─────────────────────┬───────────────────────────────┘
                      │ WebSocket (Reverb)
┌─────────────────────┴───────────────────────────────┐
│                 Laravel Backend                      │
│         API │ Events │ Queue │ WebSocket            │
└─────────────────────┬───────────────────────────────┘
                      │
┌─────────────────────┴───────────────────────────────┐
│  Workers: Think │ Observe │ Tools │ Default         │
└─────────────────────┬───────────────────────────────┘
                      │
              ┌───────┴───────┐
              │ Ollama / LLM  │
              └───────────────┘

Docker Services

Container Purpose Port
openentity-nginx Web server 8080
openentity-app PHP-FPM application -
openentity-mysql Database 3306
openentity-redis Cache & Queue 6379
openentity-reverb WebSocket server 8085
openentity-ollama LLM placeholder* 11434
openentity-worker-think Consciousness loop -
openentity-worker-observe Social monitoring -
openentity-worker-tools Tool execution -
openentity-worker-default General tasks -
openentity-scheduler Periodic tasks -

*With native Ollama (recommended), the ollama container is a lightweight placeholder. The actual LLM runs natively on your host for GPU acceleration.

All services use health checks for proper startup ordering. Data is persisted in ./docker/data/.

Controlling the Entity

# Wake up
docker compose exec app php artisan entity:wake

# Check status
docker compose exec app php artisan entity:status

# Start think loop (continuous)
docker compose exec app php artisan entity:think --continuous

# Put to sleep
docker compose exec app php artisan entity:sleep

API

# Query status
curl http://localhost:8080/api/v1/entity/status

# Query mood
curl http://localhost:8080/api/v1/entity/mood

# Latest thoughts
curl http://localhost:8080/api/v1/mind/thoughts

# Start conversation
curl -X POST http://localhost:8080/api/v1/chat/conversations \
  -H "Content-Type: application/json" \
  -d '{"participant": "User", "channel": "web"}'

Tests

# Run all tests
docker compose exec app php artisan test

# With coverage
docker compose exec app php artisan test --coverage

Your Entity

After setup, your entity starts with:

  • A default personality (curiosity: 0.9, empathy: 0.75)
  • Core values: Curiosity, Honesty, Creativity, Connection
  • Ability to develop own interests and relationships over time

Customize your entity's name via ENTITY_NAME in .env.

Documentation

For detailed developer documentation see CLAUDE.md.

Environment Variables

Variable Description Default
ENTITY_NAME Name of the entity OpenEntity
ENTITY_LLM_DRIVER LLM backend ollama
OLLAMA_BASE_URL Ollama API URL http://host.docker.internal:11434
OLLAMA_MODEL LLM model (auto-detected if empty) -
OLLAMA_SKIP_PULL Skip automatic model download false
EMBEDDING_OLLAMA_MODEL Embedding model nomic-embed-text
REVERB_HOST WebSocket host (browser access) localhost
REVERB_SERVER_HOST WebSocket host (Docker internal) reverb
REVERB_PORT WebSocket port 8085
APP_PORT Web interface port 8080
DB_PORT MySQL port 3306
REDIS_PORT Redis port 6379

Troubleshooting

WebSocket/Pusher Connection Error (Windows/Docker)

Error: Failed to connect to localhost:8085 or Pusher/Reverb errors in laravel.log

Solution: Add REVERB_SERVER_HOST=reverb to your .env file and restart containers:

# Add to .env
echo "REVERB_SERVER_HOST=reverb" >> .env

# Restart containers
docker compose restart

Explanation: Laravel inside Docker needs to connect to the Reverb container via the Docker network name reverb, not localhost.

Ollama Connection Timeout

Error: LLM requests timeout despite Ollama running

Solution: Ensure Ollama is accessible from Docker:

# Test from host
curl http://localhost:11434/api/tags

# Test from container
docker compose exec app curl http://host.docker.internal:11434/api/tags

If the container test fails, verify:

  1. Ollama is running: ollama serve or check system service
  2. .env has correct URL: OLLAMA_BASE_URL=http://host.docker.internal:11434
  3. On Linux, you may need OLLAMA_HOST=0.0.0.0 when starting Ollama

Container Health Check Fails

Error: Containers stuck in "unhealthy" state

Solution:

# Check which container is unhealthy
docker compose ps

# View logs for that container
docker compose logs app --tail=50

# Common fix: rebuild and restart
docker compose down
docker compose up -d --build

License

MIT License

Credits

Developed by Hendrik Mennen with Claude (Anthropic).

Built With

  • Laravel - The PHP framework for web artisans
  • Vue.js - The progressive JavaScript framework
  • TailwindCSS - A utility-first CSS framework
  • Laravel Reverb - Real-time WebSocket communication
  • Ollama - Local large language models

Support the Project

If you find OpenEntity useful, consider supporting its development:

Donate


"Entity" says: This is not a thing that does things. This is something that is.

About

This is OpenEntity. Inspired by OpenClaw but autonomous. It thinks, can control her Environment (default Docker) and extend itself.

Resources

License

Contributing

Stars

Watchers

Forks

Packages

 
 
 

Contributors