Morphee Troubleshooting Guide
This guide helps you diagnose and resolve common issues with Morphee.
Quick Diagnostics
Check System Status
# Check all services are running
docker compose -f docker-compose.dev.yml ps
# View logs for all services
docker compose -f docker-compose.dev.yml logs
# View logs for specific service
docker compose -f docker-compose.dev.yml logs backend
docker compose -f docker-compose.dev.yml logs redis
Health Checks
# Check backend API health
curl http://localhost:8000/health
# Check Redis connectivity
docker compose -f docker-compose.dev.yml exec redis redis-cli ping
Common Issues
1. Docker Services Won't Start
Symptoms:
- Services fail to start
- Port already in use errors
- Container exits immediately
Solutions:
# Check if ports are already in use
lsof -i :8000 # Backend
lsof -i :5432 # PostgreSQL
lsof -i :6379 # Redis
# Stop all containers and restart
docker compose -f docker-compose.dev.yml down
docker compose -f docker-compose.dev.yml up -d
# Rebuild containers if needed
docker compose -f docker-compose.dev.yml down
docker compose -f docker-compose.dev.yml build --no-cache
docker compose -f docker-compose.dev.yml up -d
# Check Docker disk space
docker system df
docker system prune # Clean up if needed
2. Backend API Not Responding
Symptoms:
- Connection refused on port 8000
- Backend container keeps restarting
- 500 errors on all endpoints
Diagnosis:
# Check backend logs
docker compose -f docker-compose.dev.yml logs backend
# Check if backend container is running
docker compose -f docker-compose.dev.yml ps backend
# Enter backend container for debugging
docker compose -f docker-compose.dev.yml exec backend /bin/bash
Common Causes:
-
Missing Environment Variables
# Verify .env file exists
ls -la .env
# Check required variables are set
grep -E "DATABASE_URL|REDIS_URL|JWT_SECRET" .env -
Database Connection Issues
# Check DATABASE_URL format
# Should be: postgresql://user:password@host:port/database
# Test database connectivity from backend container
docker compose -f docker-compose.dev.yml exec backend python -c "
import asyncio
from db.client import get_db
async def check():
db = get_db()
await db.initialize()
print('DB connected:', await db.health_check())
asyncio.run(check())
" -
Python Dependencies Missing
# Rebuild backend container
docker compose -f docker-compose.dev.yml build backend
docker compose -f docker-compose.dev.yml up -d backend
3. Database Connection Errors
Symptoms:
- "Connection refused" to PostgreSQL
- Backend can't query database
- asyncpg connection pool errors
Solutions:
# Check PostgreSQL is running
docker compose -f docker-compose.dev.yml ps supabase-db
# Check PostgreSQL logs
docker compose -f docker-compose.dev.yml logs supabase-db
# Connect to PostgreSQL directly
docker compose -f docker-compose.dev.yml exec supabase-db psql -U morphee -d morphee
# Run migrations if tables are missing
docker compose -f docker-compose.dev.yml exec supabase-db psql -U morphee -d morphee -f /docker-entrypoint-initdb.d/001_core_tables.sql
4. Redis Connection Issues
Symptoms:
- Events not publishing/receiving
- WebSocket updates not working
- "Connection refused" to Redis
Solutions:
# Check Redis is running
docker compose -f docker-compose.dev.yml ps redis
# Test Redis connectivity
docker compose -f docker-compose.dev.yml exec redis redis-cli ping
# Should return: PONG
# Check Redis memory usage
docker compose -f docker-compose.dev.yml exec redis redis-cli INFO memory
# Clear Redis cache if needed
docker compose -f docker-compose.dev.yml exec redis redis-cli FLUSHALL
5. WebSocket Connection Failures
Symptoms:
- WebSocket connection fails
- No real-time updates
- Browser shows WebSocket error
Solutions:
# Check WebSocket endpoint
wscat -c ws://localhost:8000/ws
# Or use browser console: new WebSocket('ws://localhost:8000/ws')
# Check backend logs for WebSocket errors
docker compose -f docker-compose.dev.yml logs backend | grep -i websocket
# Verify Redis pub/sub is working
docker compose -f docker-compose.dev.yml exec redis redis-cli
# In Redis CLI:
> SUBSCRIBE task:*
# Then in another terminal, trigger an event and check if message is received
6. Interface Registration Failures
Symptoms:
- Interface not showing in
/interfaceslist - Action execution fails with "Interface not found"
- Import errors for custom interfaces
Solutions:
# Check interface file is in correct location
ls -la backend/interfaces/integrations/
# Verify interface is registered in manager.py
docker compose -f docker-compose.dev.yml exec backend python -c "
from interfaces.manager import InterfaceManager
manager = InterfaceManager()
print('Registered interfaces:', list(manager.interfaces.keys()))
"
# Check for Python import errors
docker compose -f docker-compose.dev.yml exec backend python -c "
from interfaces.integrations.your_interface import YourInterface
print('Import successful')
"
# Restart backend to re-register interfaces
docker compose -f docker-compose.dev.yml restart backend
7. Test Failures
Symptoms:
- Tests fail unexpectedly
- Import errors in tests
- Database state issues in tests
Solutions:
# Run tests with verbose output
docker compose -f docker-compose.dev.yml exec backend pytest -v
# Run specific test file
docker compose -f docker-compose.dev.yml exec backend pytest tests/test_interfaces.py -v
# Clear pytest cache
docker compose -f docker-compose.dev.yml exec backend pytest --cache-clear
# Check test dependencies installed
docker compose -f docker-compose.dev.yml exec backend pip list | grep pytest
8. Performance Issues
Symptoms:
- Slow API response times
- High CPU/memory usage
- Database queries taking too long
Diagnosis:
# Check Docker resource usage
docker stats
# Check PostgreSQL slow queries
docker compose -f docker-compose.dev.yml exec supabase-db psql -U morphee -d morphee -c "
SELECT query, mean_exec_time, calls
FROM pg_stat_statements
ORDER BY mean_exec_time DESC
LIMIT 10;"
# Monitor backend logs for slow operations
docker compose -f docker-compose.dev.yml logs backend | grep -i "slow\|timeout"
Solutions:
-
Increase Docker Resources
- Docker Desktop → Settings → Resources
- Increase CPU/Memory allocation
-
Optimize Database
-- Add indexes for frequently queried columns
CREATE INDEX idx_tasks_status ON tasks(status);
CREATE INDEX idx_tasks_created_at ON tasks(created_at);
-- Vacuum and analyze
VACUUM ANALYZE; -
Add Connection Pooling
- Consider using PgBouncer for production
- Limit concurrent connections in config
9. File Permission Errors
Symptoms:
- Permission denied errors
- Can't write logs
- Volume mount issues
Solutions:
# Fix permissions on local directories
sudo chown -R $(whoami):$(whoami) .
chmod -R 755 .
# For macOS users with mounted volumes
# Add to docker-compose.dev.yml under volumes:
volumes:
- ./backend:/app:delegated # Add :delegated flag
10. Environment Configuration Issues
Symptoms:
- Settings not being applied
- Wrong database connection
- Incorrect secrets
Solutions:
# Verify .env file is loaded
docker compose -f docker-compose.dev.yml config
# Check environment variables in container
docker compose -f docker-compose.dev.yml exec backend env | grep -E "DATABASE|REDIS|JWT"
# Recreate containers to reload environment
docker compose -f docker-compose.dev.yml down
docker compose -f docker-compose.dev.yml up -d
Debugging Techniques
Enable Debug Logging
Add to .env:
LOG_LEVEL=DEBUG
PYTHONDONTWRITEBYTECODE=1
Restart backend:
docker compose -f docker-compose.dev.yml restart backend
Interactive Python Debugging
# Enter backend container
docker compose -f docker-compose.dev.yml exec backend /bin/bash
# Start Python REPL
python
# Import and test components
>>> from interfaces.manager import InterfaceManager
>>> manager = InterfaceManager()
>>> print(manager.list_interfaces())
Monitor Event Bus
# Subscribe to all Redis events
docker compose -f docker-compose.dev.yml exec redis redis-cli
> PSUBSCRIBE *
# Keep this running and trigger actions to see events
Inspect Database State
# Connect to PostgreSQL
docker compose -f docker-compose.dev.yml exec supabase-db psql -U morphee -d morphee
# Useful queries
\dt # List all tables
SELECT * FROM tasks LIMIT 10;
SELECT * FROM task_logs ORDER BY created_at DESC LIMIT 10;
\d tasks # Describe tasks table structure
Getting Help
Collect Diagnostic Information
Before reporting an issue, collect:
# System information
uname -a
docker --version
docker-compose --version
# Service status
docker compose -f docker-compose.dev.yml ps
# Recent logs (last 100 lines)
docker compose -f docker-compose.dev.yml logs --tail=100 > logs.txt
# Environment configuration (remove secrets!)
docker compose -f docker-compose.dev.yml config > config.txt
Reset to Clean State
If all else fails, reset everything:
# WARNING: This will delete all data!
# Stop and remove all containers, volumes, and networks
docker compose -f docker-compose.dev.yml down -v
# Remove all morphee-related Docker images
docker images | grep morphee | awk '{print $3}' | xargs docker rmi
# Remove all unused Docker resources
docker system prune -a --volumes
# Rebuild from scratch
docker compose -f docker-compose.dev.yml build --no-cache
docker compose -f docker-compose.dev.yml up -d
# Verify services are healthy
docker compose -f docker-compose.dev.yml ps
curl http://localhost:8000/health
Error Messages Reference
See also: Error Code Catalog for a comprehensive list of all error codes and messages.
"Interface not found"
- Cause: Interface not registered or misspelled name
- Fix: Check interface name, verify registration in manager.py
"Action not found for interface"
- Cause: Action method doesn't exist or not properly defined
- Fix: Verify action exists in interface class, check method signature
"Invalid parameters for action"
- Cause: Missing required parameters or wrong parameter types
- Fix: Check action definition, provide all required parameters with correct types
"Task execution timeout"
- Cause: Action took longer than timeout limit (30s default)
- Fix: Optimize action logic or increase timeout in executor
"Database connection pool exhausted"
- Cause: Too many concurrent database connections
- Fix: Reduce concurrent requests or increase pool size
"Redis connection lost"
- Cause: Redis server disconnected or restarted
- Fix: Check Redis is running, backend should auto-reconnect
Best Practices
Development Environment
- Always check logs first:
docker-compose logs - Use health checks: Verify services before debugging code
- Keep containers updated: Rebuild after dependency changes
- Monitor resources: Check Docker stats regularly
- Version control .env: Keep .env.example updated
Production Environment
- Implement proper monitoring: Use Prometheus/Grafana
- Set up alerting: Get notified of issues immediately
- Regular backups: Automate database backups
- Load testing: Test system under expected load
- Security audits: Regular dependency and security scans
Last Updated: February 13, 2026
For additional help, see:
- README.md - Getting started guide
- testing.md - Testing procedures
- architecture.md - System architecture
- deployment.md - Deployment guide