Common issues and solutions for OpenForge.
Symptom: docker compose up fails or containers keep restarting.
Check:
docker compose ps
docker compose logs openforgeCommon causes:
- PostgreSQL not ready yet β the backend waits for a healthy database. Give it 30-60 seconds on first start.
- Port conflict β another service is using port 3100. Change the
PORTvariable in.env. - Insufficient memory β OpenForge needs at least 4 GB RAM. Check with
docker stats.
Symptom: First startup hangs for several minutes.
Explanation: On first run, OpenForge downloads the BGE-small embedding model (~130 MB). This only happens once if you set MODELS_HOST_PATH to a persistent directory.
Fix: Wait for the download to complete. Set MODELS_HOST_PATH in .env to a persistent path to cache models across container rebuilds.
Symptom: Logs show connection refused or could not translate host name "postgres".
Check:
docker compose logs postgres
docker compose exec postgres pg_isreadyFix: Ensure the postgres service is running and healthy. If you changed DB_PASSWORD, make sure it matches in all configuration.
Symptom: Messages are sent but no response appears.
Common causes:
- No LLM provider configured β Go to Settings > AI Models and add at least one provider.
- Invalid API key β Click "Test Connection" on your provider to verify the key works.
- Celery worker not running β Check
docker compose logs celery-worker. The worker must be healthy for background agent execution.
Symptom: Agent creation or update fails with a validation error.
Common causes:
- Duplicate slug β Another agent already uses that slug. Choose a unique one.
- Missing required fields β Name and slug are required.
- Database issue β Check backend logs:
docker compose logs openforge | grep "agent".
Fix: Fix the validation error shown in the UI and try saving again.
Symptom: Agent takes a long time to respond.
Common causes:
- Slow LLM provider β Some providers have higher latency. Try a different provider or model.
- Large knowledge base β Search and context assembly take longer with more data. This is normal.
- Reranking enabled β Cross-encoder reranking adds latency but improves relevance. Disable in Settings if speed is more important.
- First response after restart β The embedding model loads on first use. Subsequent queries are faster.
Symptom: Agent reports tool execution errors.
Check:
docker compose logs tool-serverCommon causes:
- Tool server not running β Restart with
docker compose restart tool-server. - Tool blocked by permission β Check Settings for blocked tools.
- Workspace path issues β Ensure workspace volumes are correctly mounted.
Symptom: Chat streaming stops mid-response, or connection drops.
Common causes:
- Reverse proxy timeout β If using nginx, set
proxy_read_timeout 3600sfor the/ws/location. - Network instability β The frontend auto-reconnects with exponential backoff. Wait a moment.
- Backend restart β If the backend restarts, WebSocket connections are dropped. Refresh the page.
Symptom: Agent runs fail or produce errors.
Common causes:
- Missing provider config β Agent runs need a valid LLM provider resolved. Check that the agent's LLM config points to an active provider.
- Tool failures β A tool the agent depends on may be failing. Check the run detail page for tool call errors.
- Token limit exceeded β The conversation may have exceeded the model's context window. Check max_tokens settings.
Check:
docker compose logs openforge | grep "agent_executor"
docker compose logs celery-worker | grep "tool_loop"Symptom: You've added knowledge but search returns no results.
Common causes:
- Processing not complete β Knowledge needs to be chunked and embedded before it's searchable. Check if the knowledge item shows a processing spinner.
- Wrong workspace β Search is scoped to the current workspace. Make sure you're in the right one.
- Qdrant not ready β Check
docker compose logs qdrant.
Fix: Try reprocessing the knowledge item from its context menu (right-click > Reprocess).
Symptom: Uploading PDFs, images, or other files fails.
Check:
docker compose logs openforge | grep -i "upload\|error"Common causes:
- File too large β The default max file size is 50 MB.
- Unsupported format β Supported formats: PDF, DOCX, XLSX, PPTX, JPEG, PNG, MP3, WAV.
- Disk full β Check available disk space for the uploads volume.
Symptom: Bookmarks are saved but content is not extracted.
Common causes:
- Auto-extraction disabled β Enable it in Settings > Pipelines or during onboarding.
- Site blocks crawling β Some websites block automated content extraction.
- SearXNG not running β Some extraction flows use the SearXNG service. Check
docker compose logs searxng.
Symptom: Automation is configured but runs are not being created.
Common causes:
- Not deployed β An automation does nothing until you create a deployment with a trigger. Check the Deployments page.
- Deployment paused β The deployment may be in paused state. Resume it from the Deployments page.
- Budget exhausted β Check if
max_runs_per_dayormax_concurrent_runslimits have been reached. - Cooldown active β After a failure, the
cooldown_seconds_after_failuresetting may be preventing new runs. - Agent not found β Agent nodes in the automation must reference existing agents.
Symptom: Automation triggers but runs end in "failed" status.
Check: View the run detail page for the error message and timeline.
Common causes:
- Agent config outdated β Edit and save the agent to create a new version snapshot.
- Provider not available β The LLM provider may be down or the API key expired.
- Token budget exceeded β The automation's
max_token_budget_per_daymay have been reached.
Symptom: Runs complete but no outputs appear.
Common causes:
- Agent has no output definitions β Only agents with configured output definitions emit outputs. Check the agent's output definitions in the agent detail page.
- Sink not configured β Check the automation's sink nodes and wiring. Outputs require a configured sink destination.
Symptom: Output versions are not being created as expected.
Fix: Check the output detail page for version history. Each material change should create a new version. If versions are missing, check the backend logs for errors in the versioning system.
Symptom: Previously working LLM providers show decryption errors.
Cause: The ENCRYPTION_KEY in .env changed between restarts. All API keys are encrypted with this key.
Fix:
- Restore the original
ENCRYPTION_KEYfrom your backup. - If the original key is lost, delete the affected providers in Settings and re-add them with fresh API keys.
Prevention: Always set and persist ENCRYPTION_KEY in .env. Generate with:
python3 -c "from cryptography.fernet import Fernet; print(Fernet.generate_key().decode())"Symptom: Login page appears but password is rejected.
Common causes:
- Wrong password β The
ADMIN_PASSWORDin.envcan be plaintext or a bcrypt hash. Verify it matches. - Session expired β Default session expiry is 7 days. Clear cookies and try again.
Fix: If you've forgotten the password, update ADMIN_PASSWORD in .env and restart:
docker compose restart openforgeSymptom: No login page appears even though you set ADMIN_PASSWORD.
Check: Ensure ADMIN_PASSWORD is set in .env (not empty) and the backend was restarted after the change.
Symptom: Docker containers consuming excessive RAM.
Explanation: OpenForge loads ML models (embedding, CLIP, optional Whisper) into memory. Expected baseline:
- Backend: 1-2 GB (with embedding model loaded)
- Celery Worker: 1-2 GB
- Qdrant: 200 MB - 1 GB (depending on knowledge base size)
- PostgreSQL: 100-300 MB
- Redis: 50-100 MB
Fix: If memory is constrained:
- Don't enable optional models (Whisper, CLIP) unless needed.
- Reduce
CELERY_WORKERSto 1. - Ensure Docker has sufficient memory allocated (4 GB minimum, 8 GB recommended).
Symptom: Search queries take several seconds.
Common causes:
- Reranking enabled β Disable cross-encoder reranking in Settings for faster (but potentially less relevant) results.
- Large knowledge base β With 50K+ knowledge items, consider running Qdrant on an SSD.
- Qdrant resource limits β Increase the Qdrant memory limit in
docker-compose.ymlif needed.
View logs for any service:
# All services
docker compose logs -f
# Specific service
docker compose logs -f openforge
docker compose logs -f celery-worker
docker compose logs -f tool-server
docker compose logs -f postgres
docker compose logs -f qdrant
docker compose logs -f redisAfter code changes or updates:
# Rebuild all
docker compose build
docker compose up -d
# Rebuild specific service
docker compose build openforge
docker compose up -d openforge
# Rebuild tool server after tool changes
docker compose build tool-server && docker compose up -d tool-server
# Then sync tools:
curl -X POST http://localhost:3100/api/v1/tools/syncTo start completely fresh:
docker compose down -v
rm -rf ./data
docker compose up -dWarning: This permanently deletes all data including knowledge, conversations, agents, automations, and settings.
Symptom: Permission denied errors when writing to mounted volumes.
Fix: Ensure the data directories exist and are writable:
mkdir -p data/workspace data/uploads data/postgres data/qdrant data/models data/redis
chmod -R 777 data/If your issue isn't covered here:
- Check the container logs for specific error messages
- Open an issue on GitHub with:
- The error message or behavior you're experiencing
- Your Docker Compose version (
docker compose version) - Your OS and Docker version
- Relevant log output (
docker compose logs <service>)
For configuration reference, see Configuration. For deployment instructions, see Deployment.