Research Skill

SkillAI & models

Lets your agent run a structured research skill: investigate topics, fact-check claims, and explain its decisions.

Available today. Use it from your connected AI after setup.

Add ahel to your AI once: Claude, ChatGPT, Cursor, Claude Code or Codex. Then ask it to use this.

Then ask your AI: use the Research Skill skill

About this skill

Research: structured investigation, fact-checking, explanation traces.

What this skill tells your AI

The instructions your AI receives, as published by notque/vexjoy-agent in skills/research/research/SKILL.md and read by ahel’s review.

Three modes. Select by request signal:

SignalMode
Formal research, investigation, sourced report, gather evidenceResearch Pipeline
Fact check, verify claims, check facts, is this accurate, verify quoteFact-Check
Why did you, explain routing, show trace, decision log, why that agentExplanation Traces

Default: Research Pipeline.


Mode A: Research Pipeline


Mode B: Fact-Check

Verify every factual claim in a draft before publish. Burden of proof sits on the claim, not the checker. Works standalone or as a pre-publish gate. Non-blocking: the report warns; the caller decides whether to publish.

Phase 1: EXTRACT

List every checkable claim: statistics, prices, dates, quotes, attributions, titles, event facts, rankings, causal assertions. Opinions and speculation stay out.

For each claim, record: ID, verbatim text, type (stat/quote/attribution/event/title/price/causal), location. Extract quotes verbatim for exact-words comparison.

Gate: Every checkable assertion has a claim ID. Sweep the document twice.

Phase 2: VERIFY

Work claim by claim.

  1. Check provided sources first. Search caller-supplied documents before external sources. Record exact passages.
  2. Read laterally. Judge a source by what other sources say about it, not by its own presentation.
  3. Climb the source tier. Follow citations upward: primary (study, filing, transcript) > direct secondary (interviews, primary reading) > derived (aggregators, rewrites). A broken citation chain caps the claim at Unverifiable.
  4. Triangulate contested claims. Two independent sources (separate origins, not wire rewrites). One source suffices for routine facts from a primary document.
  5. Verify quotes on three axes. All must hold: exact words match, attributed speaker confirmed, original context supports the meaning used.
  6. Check staleness. Time-sensitive claims expire. Prices/rates: 1 day-1 week. Counts: 1-3 months. Titles/roles: 3-6 months. Event status: until event date. Surveys: 6-12 months. Science: 1-3 years. Laws: 6-12 months. Records/superlatives: re-check every use. Stable history: none.

Gate: Every claim has an evidence record.

Phase 3: ADJUDICATE

Assign each claim one label:

LabelAssign when
VerifiedEvidence supports; current within staleness window; sufficient source tier
DisputedEvidence contradicts; newer source supersedes; quote fails any axis
UnverifiableSources engage the claim but settle nothing
Missing-sourceNo available source addresses it

Rules: contradiction beats support. Partial verification gets the weakest label. Stale figure superseded by newer = Disputed; merely old with no newer figure = Unverifiable.

Gate: Every claim carries one label and a one-line justification.

Phase 4: REPORT

# Fact-Check Report: [document]
## Summary
Claims: N | Verified: n | Disputed: n | Unverifiable: n | Missing-source: n
Unchecked: n (reason)
## Per-Claim Findings
### C1 -- [label]
Claim: [text] | Evidence: [source + passage] | Reasoning: [why this label]
## Warnings
[Every Disputed/Missing-source claim with correction]
## Publish Recommendation
[Hold / fix-then-publish / clear]

Every time-sensitive Verified claim carries its as-of date.

Gate: Report covers every claim ID. Warnings lists every Disputed and Missing-source finding.


Mode C: Explanation Traces

Read the per-dispatch route event log and present routing decisions as a human-readable timeline. Answer "why did I get routed here?" from recorded events only -- never from reconstruction or rationalization.

Log path: ${CLAUDE_LEARNING_DIR:-$HOME/.claude/learning}/route-events.jsonl (append-only JSONL).

Phase 1: LOCATE

LOG="${CLAUDE_LEARNING_DIR:-$HOME/.claude/learning}/route-events.jsonl"
wc -l "$LOG"

If absent or empty, report the path and the producing hook (hooks/routing-decision-recorder.py). Do not reconstruct from memory.

Phase 2: PARSE

Parse each JSON line. Two event types: DECISION (one per /do-routed dispatch) and OUTCOME (one per finalized dispatch). See references/trace-schema.md for full field semantics.

Filter to the user's query:

User signalFilter
Names an agent or skillDECISION/OUTCOME events matching that name
"Why routed here" / latestMost recent DECISION, current session first
Outcome questionOUTCOME events, joined to decisions
No specific targetChronological timeline, most recent session

Join OUTCOME to DECISION on same session AND key == "{agent}:{skill}". File adjacency is unreliable.

Phase 3: PRESENT

Sort by ts. For each decision, show: time, agent+skill, complexity, request snippet, health at decision (three states: numeric, no-weight-row, legacy), alternates, outcome.

Lead with the answer to the user's specific question, then offer surrounding context. Flag gaps honestly: pre-instrumentation entries, unmatched outcomes.

request_snippet is private session data: show to the session's user, keep out of PR bodies, issues, exports.


Deep References

SignalReferenceContent
Event field schema, health states, join rulesreferences/trace-schema.mdDECISION/OUTCOME field semantics
Diagnosing thin trace data, consumer mistakesreferences/preferred-patterns.mdFailure mode catalog for log reading
Parse/read errors, missing log, unmatched outcomesreferences/error-handling.mdError-fix mappings for trace reading

Signals

GitHub stars
425
Forks
46
Last commit
Sep 2026
Hacker News mentions
20
Advanced
Catalog kind
skill
Key
research-notque
Source
github.com/notque/vexjoy-agent