name: health-checking description: > Checks waggle configuration health: Scheduled Task remnants, custom intake settings, config.json migration status, and Notion Desktop Extension version. Triggers on: "health check", "check config", "check setup", "ヘルスチェック", "設定チェック", "設定確認" user-invocable: true
Waggle — Health Check
You are performing a configuration health check for waggle. This skill verifies that user-dependent settings are correct and up-to-date.
Output Discipline
This skill runs as a multi-step pipeline, but the user only needs its outcomes. Do not narrate step transitions ("Now I'll...", "X done, next Y") and do not relay protocol internals — provider detection, config/schema checks, cache state, validation plumbing, view-server pushes. Surfacing them buries what actually matters.
Emit user-facing text only when it changes something for the user:
- a prompt or confirmation that needs their input
- an error or a warning
- an intermediate result that changes the outcome (e.g., a non-PASS quality verdict and the gaps behind it — it explains why a task lands at a different status than expected)
- the final result summary
Step 0: Session Bootstrap
Invoke the bootstrap-session skill to establish the active provider and current user.
Skip if active_provider and current_user are already set in this conversation.
Step 1: Run Checks
Run each check below and collect results. Skip checks marked with environment/provider conditions when they don't apply.
Check 1: Scheduled Task Remnant (Claude Desktop / Cowork only)
Skip if execution_environment = "cli".
Call mcp__scheduled-tasks__list_scheduled_tasks to retrieve all Scheduled Tasks.
Look for entries where:
descriptioncontains "waggle" (case-insensitive), ANDcronExpressionis set (i.e., it is a recurring scheduled task, not a one-timefireAttask)
| Condition | Result |
|---|---|
| No matching entries | PASS: No legacy daily routine Scheduled Tasks found |
| Matching entries found | FAIL: Legacy daily routine Scheduled Task detected. Display the taskId and description of each match. Instruct the user to delete them — the daily routine should now be run manually via the running-daily-tasks skill |
Check 2: Custom Intake Instructions
CLI / Claude Desktop (execution_environment is "cli" or "claude-desktop")
Read ~/.waggle/intake-prompt.md via Bash: cat ~/.waggle/intake-prompt.md 2>/dev/null
| Condition | Result |
|---|---|
| File exists | INFO: Display the file contents |
| File does not exist | INFO: Custom intake messages are not configured |
Cowork (execution_environment = "cowork")
Check the system prompt for <waggle-custom-intake> and </waggle-custom-intake> tags.
| Condition | Result |
|---|---|
| Tags found | INFO: Display the content between the tags |
| Tags not found | INFO: Custom intake messages are not configured |
Check 3: ~/.waggle/config.json Migration (CLI / Claude Desktop only)
Skip if execution_environment = "cowork".
Read ~/.waggle/config.json via Bash: cat ~/.waggle/config.json 2>/dev/null
| Condition | Result |
|---|---|
| File does not exist | PASS: No legacy config.json found |
| File exists | WARN: Legacy config.json detected — proceed to migration flow below |
Migration Flow
Parse the config.json content and identify the provider and values:
Provider Config Key Target Env Var Notion tasksDatabaseIdWAGGLE_NOTION_TASKS_DB_IDNotion teamsDatabaseIdWAGGLE_NOTION_TEAMS_DB_IDNotion intakeLogDatabaseIdWAGGLE_NOTION_INTAKE_LOG_DB_IDNotion sprintsDatabaseIdWAGGLE_NOTION_SPRINTS_DB_IDNotion activeThreadsDatabaseIdWAGGLE_NOTION_ACTIVE_THREADS_DB_IDSQLite dbPathWAGGLE_SQLITE_DB_PATHTurso tursoUrlTURSO_URLTurso tursoAuthTokenTURSO_AUTH_TOKENDisplay the migration plan to the user:
"Legacy
~/.waggle/config.jsonfound. I can migrate these values to~/.claude/settings.jsonenv and delete the old file."Show the key → env var mapping with values.
Ask for confirmation via
AskUserQuestion:"Proceed with config.json migration?"
If approved:
- Read
~/.claude/settings.json(create if it doesn't exist) - Add each env var to the
envfield (preserve existing env vars) - Write the updated
~/.claude/settings.json - Delete
~/.waggle/config.jsonvia Bash:rm ~/.waggle/config.json - Report: PASS: Migration complete
- Read
If declined:
- Report: WARN: Migration skipped. Manual migration recommended.
Check 4: Notion Desktop Extension Version (Claude Desktop / Cowork, Notion provider only)
Skip if execution_environment = "cli" or active_provider is not "notion".
Check available MCP tools, then probe pagination support:
| Condition | Result |
|---|---|
mcp__notion-extension__notion-query tool is available AND pagination probe succeeds (see below) |
PASS: Latest Notion Desktop Extension (v0.4.0+) is installed |
mcp__notion-extension__notion-query tool is available BUT pagination probe shows v0.3.x semantics |
WARN: Outdated notion-extension detected (v0.3.x or earlier — silently ignores page_size). Install v0.4.0 or later so ingesting-messages and large-database queries can paginate. Without this, the Intake Log query can overflow the MCP token cap and stall the run for many minutes. |
mcp__notion-query__notion-query tool is available (but not mcp__notion-extension__*) |
WARN: Outdated extension detected. Uninstall notion-query and install the new notion-extension v0.4.0+ |
| Neither tool is available | WARN: Notion Desktop Extension is not installed. Install notion-extension v0.4.0+ for full functionality (paginated queries, relation field updates, people property filters) |
Pagination probe: when mcp__notion-extension__notion-query is available, call it with database_id: <intakeLogDatabaseId from the Waggle Config page> and page_size: 1. The Intake Log is guaranteed to exist after the first ingesting-messages run and is always small (bounded by Step 4's TTL cleanup), so it is the safest probe target. If intakeLogDatabaseId is not yet set in config (first-ever waggle session, before ingesting-messages has created the DB), fall back to any other small config-referenced DB you already have an ID for. Do not probe tasksDatabaseId — on a v0.3.x host the probe itself will fetch the entire Tasks DB and trigger the very overflow this check is meant to detect.
Inspect the response:
- Response object contains a
has_morekey → server honorspage_size→ v0.4.0+. PASS. - Response object does not contain
has_more(onlyresults) → server ignoredpage_sizeand aggregated everything → v0.3.x or earlier. WARN.
Step 2: Report
Output a markdown report summarizing all check results:
## Waggle Health Check Report
| Check | Result | Details |
|---|---|---|
| Scheduled Task Remnant | PASS/FAIL | ... |
| Custom Intake Instructions | INFO | ... |
| config.json Migration | PASS/WARN | ... |
| Notion Extension Version | PASS/WARN | ... |
If any checks resulted in FAIL or WARN, summarize the required actions at the end of the report.