name: bot-status description: | Generate a full operational status report for the Aivena bot. Checks all subsystems: extensions, webserver, Telegram, chat bridge, heartbeat, cron, database, memory, CRM, calendar, task management, jobs/telemetry, and storage.
Triggers — use this skill when: - User asks for "status", "bot status", "system status", "operational status" - User asks "is everything running?", "how's Aivena doing?" - User says "health check", "diagnostics", "systems check" - User asks "what's the state of the bot?"
Bot Status Skill
Generate a comprehensive operational status report for the Aivena bot, covering every subsystem.
Report Structure
Produce all sections in order. Use status icons consistently:
- ✅ healthy / running / OK
- ⚠️ degraded / warning
- ❌ down / error / missing
- ⏳ unknown / checking
- 📊 informational metric
1. Overview
Show:
- Bot name, version (from package.json if available)
- Current branch and git status (clean/dirty, uncommitted count)
- Uptime context: when the current pi session started (from jobs tool if available)
- Current date/time
2. Extensions
Check both extension directories for installed extensions:
- Workspace extensions:
.pi/extensions/ - Global extensions:
~/.pi/agent/extensions/
ls -1 .pi/extensions/ 2>/dev/null
ls -1 ~/.pi/agent/extensions/ 2>/dev/null
For each extension found, read its package.json to get the version:
cat .pi/extensions/<name>/package.json 2>/dev/null | grep '"version"'
cat ~/.pi/agent/extensions/<name>/package.json 2>/dev/null | grep '"version"'
Report each extension with its source (workspace or global), version, and whether it's a symlink.
If an extension appears in both locations, note it — workspace takes precedence.
Format as a compact table:
Extensions (16 loaded)
Workspace (.pi/extensions/):
✅ pi-calendar 0.1.0 (symlink)
✅ pi-channels 0.1.0 (symlink)
Global (~/.pi/agent/extensions/):
✅ pi-memory 0.2.1 (symlink)
✅ pi-jobs 0.1.0 (symlink)
...
3. Webserver
Check if the pi-webserver is responding:
curl -s --connect-timeout 5 --max-time 10 -o /dev/null -w "%{http_code}" http://localhost:4110/ 2>/dev/null
Report:
- HTTP status code
- Port (from
.pi/settings.json→pi-webserver.port) - Whether autostart is enabled
Format:
Webserver
✅ Responding on port 4110 (HTTP 200)
Autostart: enabled
If unreachable:
Webserver
❌ Not responding on port 4110
4. Telegram & Chat Bridge
Read .pi/settings.json → pi-channels config and report:
- Telegram adapter: configured ✅/❌, polling enabled, allowed chat IDs
- Chat bridge: enabled ✅/❌, max queue, timeout, max concurrent
- Routes: list all configured routes (name → adapter → recipient)
Do NOT print the bot token — just confirm it's set (e.g., "Bot token: configured ✅").
Format:
Telegram & Chat Bridge
Telegram adapter: ✅ configured
Bot token: set
Polling: enabled (30s timeout)
Allowed chats: 1 configured
Chat bridge: ✅ enabled
Max queue: 5/sender, timeout: 300s, concurrency: 2
Routes:
ops → telegram → chat 5991...451
cron → telegram → chat 5991...451
5. Heartbeat
Read .pi/settings.json → pi-heartbeat config:
- Enabled/disabled
- Interval
- Active hours
- Route
Format:
Heartbeat
✅ Enabled — every 60min, 08:00–22:00
Route: ops
Autostart: enabled
6. Cron Jobs
Use the cron tool (action: list) to show all scheduled jobs:
- Job name, schedule, enabled/disabled, last run
If no jobs:
Cron Jobs
⚠️ No cron jobs configured
7. Database
Check the SQLite database (managed by pi-kysely at .pi/db/aivena.db):
# Size
du -sh .pi/db/aivena.db
# Tables
sqlite3 -readonly .pi/db/aivena.db "SELECT name FROM sqlite_master WHERE type='table' ORDER BY name"
# Row counts for key tables (robust against missing tables)
for table in contacts interactions companies reminders; do
count=$(sqlite3 -readonly .pi/db/aivena.db "SELECT CASE WHEN EXISTS (SELECT 1 FROM sqlite_master WHERE type='table' AND name='$table') THEN (SELECT COUNT(*) FROM $table) ELSE 0 END" 2>/dev/null)
echo "$table: ${count:-0}"
done
If the database is empty (0 bytes) or has no tables, note it:
Database
⚠️ aivena.db exists but is empty (0 bytes)
If populated:
Database (.pi/db/aivena.db — 156KB)
Tables: contacts, interactions, companies, reminders, ...
CRM: 12 contacts, 34 interactions, 5 companies, 3 reminders
8. Memory System
Check memory health:
# Long-term memory
wc -l < MEMORY.md 2>/dev/null
wc -c < MEMORY.md 2>/dev/null
# Daily logs
ls -1 .pi/memory/ 2>/dev/null | wc -l
ls -lt .pi/memory/ 2>/dev/null | head -3
Also use memory_read (target: long_term) to verify it's readable, and memory_read (target: list) to count daily logs.
Format:
Memory
✅ MEMORY.md: 142 lines, 4.2KB
📊 Daily logs: 8 files
Latest: 2026-02-12
9. CRM
Use the crm tool to check:
crm searchwith a broad query to count contactscrm upcomingto show upcoming reminderscrm list_companiesto count companies
Format:
CRM
✅ Operational
📊 15 contacts, 7 companies
Upcoming: 2 reminders in next 7 days
Or if empty:
CRM
⚠️ No contacts yet
10. Calendar
Use the calendar tool:
calendar today— today's eventscalendar upcoming— next 7 days
Format:
Calendar
Today: 2 events
10:00 — Team standup
14:00 — Client call
Next 7 days: 5 events
Or:
Calendar
Today: no events
Next 7 days: no events
11. Task Management (td)
td next 2>/dev/null
td reviewable 2>/dev/null
td list --status open 2>/dev/null | head -20
td list --status in_progress 2>/dev/null | head -10
td list --status in_review 2>/dev/null | head -10
Format:
Task Management
📊 Open: 12 issues, In progress: 2, In review: 3
Next up: td-abc123 "Some important task" (P1)
Reviewable: td-def456, td-ghi789
12. Jobs & Telemetry
Use the jobs tool:
jobs stats— overall statisticsjobs recent(limit: 5) — recent runs
Format:
Jobs & Telemetry
📊 Total runs: 245, Errors: 3 (1.2%)
Avg duration: 28.4s
Total cost: $1.23
Recent:
12:05 — tui — 34s — success
11:42 — cron — 12s — success
11:00 — heartbeat — 45s — success
13. Storage
du -sh .pi/db/aivena.db
du -sh .pi/memory/
du -sh log/
du -sh .todos/
du -sh .pi/extensions/
# Total workspace size (excluding node_modules, .git)
du -sh --exclude=node_modules --exclude=.git . 2>/dev/null || du -sh . 2>/dev/null
Format:
Storage
aivena.db: 156KB
Memory: 12KB
Logs: 48KB
Tasks (.todos): 8KB
Extensions: 2.1MB
Workspace: 3.4MB
14. Configuration Validation
Cross-check .pi/settings.json for:
- All referenced adapters exist in the config
- Routes reference valid adapters
- Required fields are present (bot token set, ports defined)
- No obvious misconfigurations
Config Validation
✅ All routes reference valid adapters
✅ Webserver port configured
✅ Bot token present
⚠️ pi-cron in settings but extension not found
15. Summary & Health Score
Aggregate all checks into a health score:
Health Score: 12/14 checks passing
Summary:
Aivena is operational with 13 extensions loaded. Telegram bridge and
webserver are responding. No cron jobs configured — consider adding
scheduled tasks. Database is empty — CRM not yet populated.
Action Items:
1. ⚠️ Configure cron jobs for recurring tasks
2. ⚠️ Populate CRM with initial contacts
3. ✅ All core systems operational
Formatting Guidelines
- NEVER wrap output in triple-backtick code fences — use plain text with Unicode
- Use em-dash (—) for inline descriptions
- Keep compact but comprehensive
- Mask sensitive data (tokens, keys) — show only "configured ✅" or first/last 4 chars
- Status icons: ✅ ⚠️ ❌ 📊
- Section headers in bold
Execution Order
Run all independent checks in parallel where possible (e.g., curl + sqlite + td can all run concurrently). Group tool calls that don't depend on each other.
Security
- Never print full bot tokens, API keys, or secrets
- Use
-readonlyflag for SQLite queries - Don't modify any state — this is a read-only diagnostic