Skip to content
Skill Authoring
Skill

/bot-status

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

BOOST
From plugin
pi
12238 skills5 agents
Install
$ npx -y skills add espennilsen/pi --skill bot-status --agent claude-code

How it fires

How this skill gets triggered: by you, by Claude, or both.

  • Fires itselfAuto-invocation. Claude auto-loads it when your prompt matches the work.Auto-invocation is when the right skill fires by itself at the right moment, driven by a FLOW.md router and a hook, instead of you invoking it by name. It is the difference between a skill being installed and a skill actually getting used.Read the full definition →
  • You can call itInvoke it directly when you want it.
  • Slash command/bot-status

Context preview

The summary Claude sees to decide when to auto-load this skill.

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

SKILL.md

bot-status.SKILL.md
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 search` with a broad query to count contacts
  • `crm upcoming` to show upcoming reminders
  • `crm list_companies` to 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 events
  • `calendar 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:
Read more
Ships withpi

This repository is my Pi coding agent home directory. I keep it under version control and symlink it to ~/.pi/agent so Pi loads configuration, extensions, skills, and runtime state from here.

Get the whole plugin

Other skills on pi.