Common issues and solutions when running PortOS.
Symptom: Server fails to start with EADDRINUSE error.
Solution:
# Find what's using the port
lsof -i :5554
lsof -i :5555
# Kill the process or choose different ports in ecosystem.config.cjsSymptom: pm2 start ecosystem.config.cjs shows process but status is errored.
Solution:
# Check PM2 logs for errors
pm2 logs portos-server --lines 100
# Common causes:
# - Missing dependencies: npm run install:all
# - Missing data directory: mkdir -p data
# - Port conflict: check EADDRINUSE errorsSymptom: Server crashes with ENOENT errors about files in data/.
Solution:
# Copy sample data files
cp -r data.sample/* data/Symptom: PortOS works on localhost but not from phone/tablet.
Causes and Solutions:
- Tailscale not connected: Ensure both devices are on same Tailscale network
- Firewall blocking: Check local firewall allows ports 5554-5555
- Server bound to localhost: PortOS should bind to 0.0.0.0 (default)
# Verify server is listening on all interfaces
netstat -an | grep 5555
# Should show: *.5555 or 0.0.0.0:5555Symptom: Real-time features (logs, CoS updates) stop working.
Solution:
- Check browser console for WebSocket errors
- Verify server is running:
pm2 status - Restart server:
pm2 restart ecosystem.config.cjs
Symptom: DevTools runs fail with "command not found".
Solution:
# Install Claude Code globally
npm install -g @anthropic-ai/claude-code
# Verify installation
which claude
claude --versionSymptom: AI runs fail with authentication errors.
Solution:
- Check provider configuration in PortOS Settings
- Verify API key is valid and has credits
- For Claude: ensure
ANTHROPIC_API_KEYis set
Symptom: Error "model: xyz not found" or similar.
Solution:
- Verify model name matches provider's available models
- Check provider documentation for correct model identifiers
- Common models:
- Claude:
claude-sonnet-4-20250514,claude-opus-4-5-20251101 - OpenAI:
gpt-4,gpt-4-turbo - Ollama: Model must be pulled first (
ollama pull llama3)
- Claude:
Symptom: CoS page shows "Stopped" status.
Solution:
- Click "Start" button in CoS UI
- Or enable
alwaysOn: truein CoS config - Check server logs for startup errors
Symptom: Tasks stay in "pending" status, no agents start.
Solution:
# Check CoS runner is running
pm2 status | grep portos-cos
# Check runner logs
pm2 logs portos-cos --lines 100
# Verify Claude CLI is available
which claudeSymptom: Added tasks to TASKS.md but CoS ignores them.
Solution:
- Verify task format matches expected syntax:
## Pending - [ ] #task-001 | HIGH | Task description
- Check file path in CoS config matches your TASKS.md location
- Trigger manual evaluation via UI
Symptom: Memory search returns no results, embeddings fail.
Solution:
- Ensure LM Studio is running on port 1234
- Load an embedding model in LM Studio (e.g.,
nomic-embed-text) - Check memory embeddings status:
GET /api/memory/embeddings/status
Symptom: PM2 shows high restart count, app unstable.
Solution:
# Check for crash reason
pm2 logs portos-server --lines 200
# Common causes:
# - Unhandled exceptions (check error handling)
# - Memory limit exceeded (increase max_memory_restart)
# - Missing environment variablesSymptom: pm2 stop doesn't work or processes restart.
Solution:
# Stop specific ecosystem
pm2 stop ecosystem.config.cjs
# Never use these (affects all PM2 apps):
# pm2 kill ← Don't use
# pm2 delete all ← Don't useSymptom: Code changes don't take effect.
Solution:
# Restart to pick up changes
pm2 restart ecosystem.config.cjs
# For frontend changes, Vite hot-reload should work
# For server changes, PM2 watch mode can help (if enabled)Symptom: Apps disappear after restart.
Causes:
data/apps.jsonwas deleted or corrupted- File permissions prevent writing
Solution:
# Check file exists and is valid JSON
cat data/apps.json | jq .
# If corrupted, restore from backup or recreateSymptom: Action history clears on restart.
Solution:
- Check
data/history.jsonexists and is writable - Verify disk space available
Causes and Solutions:
- Large log files: Clear old logs with
pm2 flush - Many apps: Pagination added in recent versions
- Network latency: Use local access when possible
Solution:
# Check PM2 memory usage
pm2 monit
# Set memory limits in ecosystem.config.cjs
max_memory_restart: '500M'Symptom: AI runs hit timeout before completing.
Solution:
- Increase timeout in provider settings
- Break large tasks into smaller chunks
- Check network connectivity to AI provider
Symptom: Frontend changes require manual refresh.
Solution:
- Check Vite is running:
pm2 logs portos-client - Ensure file watchers aren't exhausted:
fs.inotify.max_user_watches
Solution:
cd server
npm test
# For specific test file
npm test -- taskParser.test.js
# Watch mode for development
npm run test:watch- Check logs:
pm2 logsshows all process output - Browser console: F12 → Console for frontend errors
- Server logs: Look for emoji prefixes (❌ errors,
⚠️ warnings) - GitHub Issues: Report bugs at https://github.com/atomantic/PortOS/issues