First Launch
After docker compose up -d completes, verify the deployment and send your first message.
Verify services
wasp status
Or, equivalently:
docker compose ps
Every service should show as healthy or up. If any service is restarting or unhealthy, check its logs:
wasp logs <service> # or: docker compose logs <service> --tail=80
Verify the health endpoint
curl -s http://localhost:8080/health | jq
You should get a JSON response with status: "ok" and component statuses.
Verify the bot
curl -s "https://api.telegram.org/bot${TELEGRAM_BOT_TOKEN}/getMe" | jq
.ok should be true and the username should match your bot.
Sign in to the dashboard
The dashboard binds to 127.0.0.1:8080 by default (loopback only). From the host itself, open http://localhost:8080. From another machine, you have three options — SSH tunnel, TLS reverse proxy, or DASHBOARD_BIND=0.0.0.0 for short-lived LAN testing. See Dashboard Access for the full guide.
Sign in with DASHBOARD_USER / DASHBOARD_PASSWORD.
If you didn't set those in onboarding, a temporary password was printed to stderr on first boot. Tail the agent-core logs to find it:
wasp logs | grep -i 'dashboard.*credentials'
The first page is the Overview dashboard. The sidebar groups pages into five sections:
- Dashboard — Overview, Chat, Command palette
- Configurations — Identity, Config Center, Skills, Models, Integrations
- System — Scheduler, Agents, Goals, Subscriptions, Health
- Governance — Self-Improve, Behavioral Rules, Audit, Reset
- Observability — Traces, Live, Metrics, Cognitive, Memory, Knowledge Graph, World Model, Vector Memory
Send the first message
Open Telegram, find your bot by username, and send any message — for example:
What's the time?
The first message after a fresh start triggers the boot sequence:
- Telegram connectivity check.
- Active model liveness ping (8 s timeout,
max_tokens=1). Reports "live ✓" or "unreachable ✗". - Knowledge graph readiness.
- Browser session capability.
- Memory subsystem.
The boot message includes a cognitive-state warning when the system is post-reset, telling you that all knowledge has been cleared and rebuild will take a few sessions.
After the boot message, the agent processes your actual question and replies normally.
Verify a trace
After the first response, open the dashboard at /traces. Find your message; you should see:
request_idpath=telegramrequest_tier=simple/normal/complexdetected_languageallowed_skills(which skills the LLM tried to call)blocked_skills(which the policy layer dropped, with reason)guard_actions(which guards fired)latency_ms
The trace tells the full story of why the response is what it is. If you ever see surprising behavior, this is the first place to look.
Verify the audit log
Send a controlled-skill request — for example:
Set a reminder to back up the disk in 30 minutes.
Then open /audit in the dashboard. You should see a row for skill.reminders with the redacted input/output.
Set a default model
If you have multiple model providers configured, open /models and choose a default. The model router (models/router.py) classifies each request (vision / code / quick / complex / default) and suggests a model when none is pinned.
Lock down access
Before considering the deployment "live":
- Verify
TELEGRAM_ALLOWED_USERSis restricted to your user IDs only. - Verify TLS certificates are valid (if using HTTPS).
- Configure an external uptime check against
/health. - Set up daily backups (see Deployment).
Troubleshooting
If the bot doesn't respond, the first message produces an error, or the dashboard returns 500: see Troubleshooting → Common Errors.
Next steps
- Operator Guide — daily usage
- Telegram — input types, commands, progress
- Dashboard — page-by-page reference
- Safety and Policy — policy layer
- Scheduler — recurring tasks