AI-generated knowledge doesn’t enter the searchable library on capture. It lands in the inbox (triage) with a 24-hour review window, where a human decides what’s worth keeping. Reviewing the inbox is how the memory stays clean: accept the entries that help future agents, refine the rough ones, and drop the junk. Don’t accept blindly — every accepted entry is something an agent will trust later.
This page is a rule you write for your agent, and a task a human does in the app. For why the gate exists, see The inbox (triage).
The sequence
Section titled “The sequence”-
List what’s waiting.
list_triagereturns entries pending review. Filter to focus.list_triage(filter?, limit=20, offset?, include_content?)list_triage(filter: "overdue")filteracceptsall,mine, oroverdue. Non-admins see only their own captured entries; admins see the org queue. The empty state is plain:{ "status": "success", "total": 0, "count": 0, "entries": [] }A populated entry carries its proposed type, title, tags, source, and review deadline:
{"id": "triage_…","entry_type": "WORK_OUTPUT","title": "Escalate KB misses to a human","tags": ["mcp", "routing"],"author": { "name": "Jordan Lee" },"source_provider": "claude","review_due_at": "2026-06-17T22:55:07.392Z","created_at": "2026-06-16T22:55:07.392Z"} -
Inspect one item. Read the full content before deciding with
get_triage_item.get_triage_item(triage_id) -
Refine it (optional). If the entry is useful but rough, ask Halyard to propose cleanup edits, then apply the one you want.
suggest_triage_edits(triage_id, instruction)apply_triage_suggestion(triage_id, message_id)suggest_triage_edits(triage_id: "triage_…", instruction: "Tighten the title and add the affected tool name to the tags.")suggest_triage_editsreturns proposed revisions;apply_triage_suggestioncommits the one you pick bymessage_id. -
Decide. Apply a knowledge classification, dismiss, or delete:
apply_triage_classification(triage_id, classification: {kind: "knowledge", entry_type?}, reason?, title?, content?, tags?)dismiss_triage(triage_id, reason?)delete_triage_item(triage_id)- Apply classification — files the reviewed entry in the searchable library. Use
classification.kind: "knowledge"; setclassification.entry_typeto change its type. Optionaltitle,content, andtagslet you make small final edits. - Dismiss — rejects it but keeps an audit record. Use this for entries that aren’t worth keeping but you want a trace of.
- Delete — removes junk that shouldn’t remain at all. Use sparingly; dismiss is usually the right call.
- Apply classification — files the reviewed entry in the searchable library. Use
For work classification, use list_triage(kind: "work_classification") and the returned
work-classification:<eventId> IDs. Apply {kind: "work_stream", work_stream_id: "…"}
to assign a stream, or {kind: "unmatched"} when no stream fits. Applying a decision does
not run a classification evaluation. Knowledge edits and deletion do not apply to these work items.
The agent rule
Section titled “The agent rule”Triage the inbox deliberately; never accept an entry you haven't read.
1. list_triage(filter: "mine") to see what you captured that's pending. Admins can use filter: "all" or "overdue" for the org queue.2. get_triage_item(triage_id) and read the full content before deciding.3. If the entry is useful but rough: suggest_triage_edits(triage_id, instruction) then apply_triage_suggestion(triage_id, message_id) — or override fields at accept time.4. apply_triage_classification(triage_id, classification: {kind: "knowledge"}) to file it (fix title/tags or classification.entry_type if needed); dismiss_triage(triage_id, reason) to reject with an audit record; delete_triage_item(triage_id) only for true junk.In practice
Section titled “In practice”- Capture what you learn — what puts entries in the inbox.
- The inbox (triage) — the lifecycle and why the gate exists.
- Tool reference — full signatures.