espennilsen/pi · Archived

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 "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 bo…

First seen May 1, 2026

Installation

$ npx skills add espennilsen/pi --skill bot-status

Stronger alternatives

This repository is archived — consider an actively maintained alternative.

Similar popular skills

Related neighbors and high-traction skills in the same topics — useful to compare before installing.

Also in this package

Other skills from espennilsen/pi · top by installs.

npx skills add espennilsen/pi

Browse all from espennilsen/pi

More details

Agent compatibility

Declared targets from SKILL.md / docs. Unmarked agents are not listed — the skill may still install via the CLI.

Claude Code Not declared
Cursor Not declared
Codex Not declared
GitHub Copilot Not declared
Windsurf Not declared
Gemini CLI Not declared
Cline Not declared
OpenCode Not declared

Repository health

Stars 116
License LICENSE
Default branch main
Open issues 2
Status Archived

Package contents

Files included with this skill beyond the listing page.

  • skill md SKILL.md 8,590 B
  • docs SUMMARY.md 521 B

History

  1. First seen on skills.sh
  2. First recorded snapshot · 1 installs

SKILL.md

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.jsonpi-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.jsonpi-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.jsonpi-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 memoryread (target: longterm) 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: 3
  Next up: td-abc123 "Some important task" (P1)
  Reviewable: td-def456, td-ghi789

12. Jobs & Telemetry

Use the jobs tool:

  • jobs stats — overall statistics
  • jobs 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 -readonly flag for SQLite queries
  • Don't modify any state — this is a read-only diagnostic