Troubleshooting
Work top-down: docker compose ps first — most issues are one unhealthy
service, and every service defines a healthcheck.
The Web App Does Not Load
docker compose ps
docker compose logs web --tail=100
docker compose logs api --tail=100
Confirm the web app is available at http://localhost:18080. If web is up
but the page errors, check the browser console for failing /api calls — the
web container proxies /api to the API container.
Login Fails
Check:
- API logs (
docker compose logs api --tail=200). JWT_SECRET_KEYis set and unchanged since sessions were issued (rotating it invalidates all sessions).- Database migrations completed (they run on API startup — look for Alembic lines in the API log).
- Seed data exists for the local demo login (
demo@manor.local).
API Cannot Connect to Database
Check DATABASE_URL, DATABASE_URL_SYNC, and PostgreSQL health:
docker compose logs postgres --tail=100
docker compose exec postgres pg_isready -U manor
If the API log shows pool-timeout errors under load instead, revisit the connection-sizing note in Configuration.
Worker Jobs / Scheduled Jobs Do Not Run
docker compose logs redis --tail=100
docker compose logs worker --tail=200
docker compose logs worker-work --tail=200
Both workers must be running: worker schedules and dispatches (Celery
beat), worker-work executes long plan steps. If scheduled jobs fire but
steps never start, worker-work is the one to check.
Agent Answers But Search Finds Nothing
Knowledge search depends on the embedding runtime:
docker compose logs ollama --tail=50
docker compose logs ollama-init --tail=50
ollama-init must have completed its one-time mxbai-embed-large download.
Until it does, RAG degrades to text-only matching. First boot on a slow
connection can take several minutes.
File or Knowledge Uploads Fail
Check MinIO and JuiceFS:
docker compose logs minio --tail=100
docker compose logs juicefs-init --tail=100
docker compose logs api --tail=200
juicefs-init must have exited successfully; the API and workers mount the
filesystem at /mnt/manor. A wedged FUSE mount after an unclean stop shows
up as I/O errors in API/worker logs — restart the affected containers.
Webhooks / Channel Messages Never Arrive
PUBLIC_BASE_URLmust be a URL the provider's servers can actually reach (HTTPS in production). For local testing use a tunnel and update it.- Telegram: with a non-HTTPS
PUBLIC_BASE_URL,TELEGRAM_MODE=autofalls back to polling — check API logs for the poller instead of a webhook. - Meta/Discord/Twilio webhooks fail silently on signature mismatch — confirm
the app secrets in
.envmatch the provider console.
Stale Frontend After an Upgrade
If the UI errors right after a deploy, the browser may hold a stale bundle.
Hard-refresh (Cmd+Shift+R / Ctrl+Shift+R). Self-hosted operators should
confirm the web image was actually rebuilt
(docker compose build web && docker compose up -d web).
Emergency: Deployment Overloaded
Set DEGRADED_MODE=true and restart the API to shed expensive routes
(streaming chat, sandbox, media generation, large uploads) while keeping
login and reads alive — see
Configuration.
Docusaurus Docs Build Fails
From the repository root:
cd docs-site
npm ci
npm run build
Broken links fail the build. Fix the link or update sidebars.js.