# Zeabur RAG Triage

> List pending knowledge base maintenance items — open reports, unverified learned chunks, low-score queries, and negative feedback. Use when checking KB health, reviewing the maintenance queue, or starting a curation session. Triggers on "review queue", "what needs attention in the KB", "pending reports", "unverified chunks", "failed queries", "KB health check". Requires admin scope.

- Skill: `zeabur/zeabur-rag-triage` (Agent Skill)
- Install (CLI): `npx skillmds@latest add zeabur/zeabur-rag-triage`
- Raw SKILL.md: https://api.skillmd.com/api/skills/zeabur/zeabur-rag-triage/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: AI & ML
- Author: zeabur (https://skillmd.com/u/zeabur)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/zeabur/zeabur-rag-triage

---


# RAG — Triage

Show what needs attention in the knowledge base. Returns 5 categories of pending items in a single call.

Base URL: `$ZEABUR_RAG_URL`
Auth: `Authorization: Bearer $RAG_API_KEY` — **admin scope required**

## API

```bash
curl -s "$ZEABUR_RAG_URL/api/admin/triage?days=14&similarity_threshold=0.4&limit=20" \
  -H "Authorization: Bearer $RAG_API_KEY"
```

| Param | Default | Description |
|-------|---------|-------------|
| `days` | `14` | Time window for signals (reports and learned have no time window) |
| `similarity_threshold` | `0.4` | Queries with `top_similarity` below this are flagged. Note: in hybrid mode (RRF), scores are ~0–0.02 so the default 0.4 catches all hybrid queries. Adjust to ~0.005 for meaningful hybrid-mode filtering. |
| `limit` | `20` | Max items per category |

## Response

Returns JSON with 5 arrays + `counts` (true totals, not truncated) + `has_more` (boolean per category):

- **`open_reports`** — reports with `status='open'`, no time window. Fields: `id`, `type`, `chunk_id`, `query`, `detail`, `created_at`.
- **`unverified_learned`** — learned chunks with `status='unverified'`, no time window. Fields: `id`, `title`, `tags`, `created_at`, `age_days`.
- **`low_similarity_signals`** — queries where the top score fell below the threshold, within the time window, deduped by query text. The score is RRF in hybrid mode (~0–0.02) or cosine in semantic mode (0–1). Fields: `id`, `query`, `top_similarity`, `top_chunk_ids`, `client`, `created_at`.
- **`negative_feedback_signals`** — queries that got negative user feedback, within the time window. Fields: `id`, `query`, `feedback_score`, `feedback_comment`, `top_chunk_ids`, `created_at`.
- **`needs_frontmatter`** — chunks whose tags include `"needs-frontmatter"`, meaning they were ingested from a source file that lacks proper frontmatter and got a temporary ID. Fields: `id`, `title`, `tags`, `url`, `source`, `created_at`.

If a category query fails, its array is empty and a `<category>_error` field appears with the error message.

## After triage

- To drill into a specific chunk: use `zeabur-rag-inspect` with the chunk ID.
- To start the full curation loop: use `zeabur-rag-curate`.
- **Do not mutate anything directly from triage results.** Always inspect first, then decide on action.

## When all categories are empty

If every count is 0, the knowledge base has no pending maintenance. Report:
"The knowledge base has no pending items — looks healthy ✅"

