AionUi Troubleshooting
Use the bundled aioncore diagnose CLI for read-only troubleshooting. It uses
the runtime context injected into the current agent conversation, so do not
discover ports or call backend endpoints by hand.
Examples in this skill use English. When reporting findings or writing user content, use the user's language.
Rules
- Use only
"$AIONUI_HELPER_BIN" diagnose .... - Start with
diagnose overviewfor broad "what is wrong" requests. - Use named diagnose commands first. Use
diagnose http getonly when no named command covers the diagnostic need. - Treat every command as read-only. To change AionUi configuration, use the
separate
aionui-configskill. - Never print raw provider, MCP header, token, password, or secret values. The CLI redacts known secret fields by default, but summarize sensitive findings carefully.
- A single
runningsnapshot does not prove a hang. Re-check the same conversation and compare runtime fields, message progress, and logs.
Capability Discovery
When unsure which command or stdin fields are available, ask the CLI:
"$AIONUI_HELPER_BIN" diagnose capabilities
The output is the agent-readable contract: domains, command names, stdin JSON fields, selector behavior, redacted fields, and the controlled HTTP escape hatch.
Runtime Context
The main stable selector is the current conversation:
{
"conversation_id": "current"
}
The CLI resolves "current" from AIONUI_CONVERSATION_ID. Commands that read
the backend also use AIONUI_BASE_URL and AIONUI_USER_ID from the same
runtime context.
Start Wide
For a vague "AionUi is broken" report, run:
"$AIONUI_HELPER_BIN" diagnose overview
Use the overview to decide where to drill in:
providers.unhealthymeans inspect provider health.mcp.enabled_but_no_toolsmeans inspect MCP startup/tool registration.cron.failingmeans inspect scheduled task state. Ifcron.failingis empty but cron issues are suspected, fall back todiagnose cron summaryand checkall[].state.last_statusdirectly.running_conversationsmeans inspect the conversation runtime repeatedly.
Commands By Symptom
Conversation Stuck Or Errored
Inspect the current conversation:
"$AIONUI_HELPER_BIN" diagnose conversations get <<'JSON'
{
"conversation_id": "current"
}
JSON
Inspect a known conversation:
"$AIONUI_HELPER_BIN" diagnose conversations get <<'JSON'
{
"conversation_id": "conv_123"
}
JSON
Read recent messages:
"$AIONUI_HELPER_BIN" diagnose conversations messages <<'JSON'
{
"conversation_id": "current",
"limit": 30,
"errors_only": true
}
JSON
Interpretation:
state=runningwithis_processing=trueis only a suspected hang after repeated checks show noturn_id, runtime, or message progress.state=waiting_confirmationorpending_confirmations > 0means the turn is waiting for user approval, not hung.
Provider Or Model Failure
"$AIONUI_HELPER_BIN" diagnose providers summary
Look for non-healthy model health, stale last_check, high latency, or an
error string. The summary is redacted; do not ask for raw provider JSON unless
the named command is insufficient.
Scheduled Task Did Not Run
"$AIONUI_HELPER_BIN" diagnose cron summary
Top-level fields: enabled, name, id.
Run-state fields are nested under state: state.last_status, state.last_error,
state.run_count, state.retry_count, state.next_run_at_ms, state.last_run_at_ms
(timestamps are millisecond epoch integers, not human dates).
MCP Server Has No Tools
"$AIONUI_HELPER_BIN" diagnose mcp summary
An enabled server with tool_count=0 usually means startup failed, the command
is unavailable, credentials are invalid, or the server crashed before tool
registration.
Team Member Hung
"$AIONUI_HELPER_BIN" diagnose teams summary
Find the member's conversation_id, then drill into that conversation:
"$AIONUI_HELPER_BIN" diagnose conversations get <<'JSON'
{
"conversation_id": "member_conv_123"
}
JSON
Backend Health
"$AIONUI_HELPER_BIN" diagnose health
Use this to confirm the backend is reachable and read the core version/build metadata.
Logs
Tail logs when the runtime provides AIONUI_LOG_DIR:
"$AIONUI_HELPER_BIN" diagnose logs tail <<'JSON'
{
"lines": 100,
"errors_only": true,
"conversation_id": "current"
}
JSON
If AIONUI_LOG_DIR is unavailable and the user gives a log directory, pass it
explicitly:
"$AIONUI_HELPER_BIN" diagnose logs tail <<'JSON'
{
"log_dir": "/Users/alex/Library/Logs/AionUi",
"lines": 100,
"errors_only": true,
"conversation_id": "conv_123"
}
JSON
Known benign noise: No onPostToolUseHook found for tool use ID warnings can
appear around tool calls and are not automatically the root cause.
Controlled HTTP Escape Hatch
Use this only when a named command does not cover the diagnostic read.
"$AIONUI_HELPER_BIN" diagnose http get <<'JSON'
{
"path": "/api/teams",
"reason": "Inspect team fields not covered by diagnose teams summary."
}
JSON
Constraints:
- GET only.
- Path must be
/healthor start with/api/. - Output is redacted and may be truncated.
- Prefer adding a named CLI command later if the same raw read becomes common.
Data Source Map
| Concern | Command |
|---|---|
| Backend alive / version | diagnose health |
| Cross-domain snapshot | diagnose overview |
| Conversation runtime | diagnose conversations get |
| Conversation messages | diagnose conversations messages |
| Provider health | diagnose providers summary |
| Scheduled jobs | diagnose cron summary |
| MCP servers | diagnose mcp summary |
| Teams and member state | diagnose teams summary |
| Logs | diagnose logs tail |
| Uncovered read-only API | diagnose http get |
Safety Notes
- This skill diagnoses; it does not repair.
- For configuration changes, switch to
aionui-config. - For scheduled task creation or updates, use the
cronskill oraionui-configcron commands. - When reporting results, explain evidence and uncertainty: "suspected stuck" after one snapshot, "confirmed stuck" only after repeated unchanged snapshots.