SIFT Toolbox User Guide#
The SIFT Toolbox is an AI-powered fact-checking assistant built around the SIFT methodology. This guide covers the core methodology, report formats, prompt system, source assessment, and chat commands.
1. The SIFT Methodology#
The Four Steps#
SIFT is a four-step framework for fact-checking and evaluating information . Each step builds on the previous to create a systematic approach to information verification:
| Step | Title | Description |
|---|---|---|
| S | Stop | Don't read or share a source until you know what it is. The goal is to prevent yourself from being influenced by or amplifying misinformation. |
| I | Investigate the Source | Look up the publication, author, or creator. Understand their expertise, perspective, and potential biases before engaging with their content. |
| F | Find Better Coverage | Instead of analyzing a single source, find what other trusted sources say about the claim. This is often called "lateral reading." |
| T | Trace Claims to Original Context | Find the original context for claims, quotes, and media. Content is often stripped of its context to mislead. Tracing it back reveals the truth. |
How the Toolbox Implements Each Step#
The SIFT Toolbox operationalizes each step through dedicated features:
Stop & Investigate (S, I)
- The Assessment of Source Reliability section in Full Check reports evaluates source usefulness, expertise, and credibility
- The source assessment sidebar provides at-a-glance reliability ratings for every cited source
Find (F)
- The Another Round command finds additional sourcesβincluding conflicting perspectivesβto surface broader viewpoints
- The Web Search command supports lateral reading by searching for coverage across multiple trusted sources
Trace (T)
- The Trace Claim command uses gathered sources to track claims back to their earliest identifiable origin
- Reports enforce structured citation practices that point back to original sources
2. Report Formats#
The SIFT Toolbox provides three distinct report formats , each suited to a different fact-checking scenario. The Full Check is the default for new analyses ; the other two are triggered via chat commands or buttons in the interface .
2.1 Full Check#
The Full Check is the most comprehensive format for systematic fact verification .
Best for:
- In-depth, claim-by-claim verification of complex topics
- Detailed fact-checking of images or artifacts
- Situations requiring authoritative source credibility assessment
Report structure β eight sections in strict order :
| # | Section | Contents |
|---|---|---|
| 1 | β Verified Facts Table | Claims confirmed through research with confidence ratings |
| 2 | β οΈ Errors and Corrections Table | Identified errors, opinions, or unsubstantiated claims with corrections |
| 3 | π οΈ Corrections Summary | Bulleted summary of the most critical corrections |
| 4 | π Potential Leads | Unconfirmed but plausible claims flagged for further investigation |
| 5 | π΄ Assessment of Source Reliability | Four-column evaluation table of every source used |
| 6 | π Revised Summary | 2β3 paragraph narrative integrating all findings |
| 7 | π What a Fact-Checker Might Say | Overall verdict on accuracy with reasoning |
| 8 | π‘ Tip Suggestion | Actionable research methodology tip |
Notable features:
- Evidence is categorized by typeβDocumentation, Personal Testimony, Statistics, Analysis, Reporting, or Common Knowledgeβand evaluated on a 1β5 credibility scale
- Claims are assessed using the Toulmin Analysis Framework for systematic argumentation analysis
- The AI reasons internally in a
<think>block before producing the final structured output
2.2 Context Report#
The Context Report provides structured contextual analysis for artifacts, images, or claims that circulate online with misleading framing .
Best for:
- Explaining viral artifacts or memes
- Providing background on quotes or images stripped of their original context
- Creating educational summaries about commonly misunderstood topics
Report structure β seven question-based sections :
| # | Section | Contents |
|---|---|---|
| 1 | Core Context | 4β6 bullet points of essential information with inline citations |
| 2 | How is it described online? | How the artifact is framed or presented in circulation |
| 3 | What does it mean to its audiences? | How different audiences interpret the artifact and what narratives it reinforces |
| 4 | What is the actual story? | Factual origin and history, directly addressing misconceptions |
| 5 | What does it actually look like? | Description of authentic versions and visual details compared to misrepresented versions |
| 6 | Larger discourse context | Broader patterns in media or communication that this example illustrates |
| 7 | Larger topical context | Keywords and short phrases for categorization and further research |
Notable features:
- Carefully distinguishes "commonly presented as" (requires multiple citations) from "has been presented as" (single example sufficient)
- All URLs must be direct final linksβno redirect links
- No additional sections beyond the specified format are permitted
2.3 Community Note#
The Community Note produces a concise, Twitter/X Community Notesβstyle annotation focused on the critical context without which an artifact would be seriously misunderstood .
Best for:
- Quick public corrections on social media
- Shareable annotations for viral content
- Communicating essential context in character-limited environments
Report structure β two components :
| # | Component | Details |
|---|---|---|
| 1 | Community Note Text | Maximum 700 characters, plain text without Markdown formatting |
| 2 | Sources | 2β5 supporting links in bare URL format |
Notable features:
- The AI internally applies the full Context Report structure but surfaces only the essential note
- Strictly excludes finer details to stay within the 700-character limit
- Uses bare URLs rather than Markdown-formatted links
Format Comparison#
| Aspect | Full Check | Context Report | Community Note |
|---|---|---|---|
| Depth | Exhaustive (8 sections) | Moderate (7 sections) | Minimal (β€700 chars) |
| Primary focus | Systematic fact verification | Contextual background | Misinterpretation prevention |
| Structure | Standardized tables + narrative | Question-based sections | Freeform brief + sources |
| Target audience | Researchers, analysts | Educators, content creators | General public |
| Citations | Extensive with evidence types | Narrative with inline citations | 2β5 bare source links |
| Typical use | Comprehensive investigations | Educational summaries | Social media corrections |
3. Prompt Engineering System#
The SIFT Toolbox guides AI behavior through a layered prompt engineering system: specialized prompt templates, a dynamic construction pipeline, intelligent context management, and provider-specific delivery.
3.1 System Prompt Architecture#
The toolbox maintains six named prompt constants :
Conversational system prompts β set the AI's persona and behavioral defaults for chat sessions:
| Prompt | Purpose |
|---|---|
SIFT_CHAT_SYSTEM_PROMPT | Base conversational assistant. Instructs the model to act as a SIFT methodology assistant, produce well-cited structured responses in Markdown, maintain session context, and recognize commands like 'another round' and 'read the room'. |
SIFT_BIAS_FOCUS_PROMPT | Specializes analysis toward identifying biases, framing effects, and rhetorical strategies. |
SIFT_MISINFORMATION_FOCUS_PROMPT | Specializes analysis toward identifying logical fallacies and disinformation tactics. |
The default system instruction exposed to non-Gemini providers is: "You are a SIFT (Stop, Investigate, Find, Trace) methodology assistant. You help users fact-check claims, understand context, and analyze information."
Report generation prompts β injected as the initial user-turn for structured report requests:
| Prompt | Purpose |
|---|---|
SIFT_FULL_CHECK_PROMPT | Drives the eight-section Full Check report. Includes internal reasoning (<think>) instructions, evidence categorization guidelines, and Toulmin Analysis Framework instructions. |
SIFT_CONTEXT_REPORT_PROMPT | Drives the seven-section Context Report. |
SIFT_COMMUNITY_NOTE_PROMPT | Drives the 700-character Community Note. |
3.2 Prompt Construction Pipeline#
Every initial analysis query passes through a five-stage assembly pipeline before reaching the AI provider:
Stage 1 β Prompt Selection
The constructFullPrompt function picks the appropriate template based on ReportType:
ReportType.FULL_CHECKβSIFT_FULL_CHECK_PROMPTReportType.CONTEXT_REPORTβSIFT_CONTEXT_REPORT_PROMPTReportType.COMMUNITY_NOTEβSIFT_COMMUNITY_NOTE_PROMPT
Stage 2 β Date Injection
The current date is substituted into the template so the AI can situate claims in time :
new Date().toLocaleDateString('en-US', {
year: 'numeric',
month: 'long',
day: 'numeric'
})
Stage 3 β Query Appending
The user's initial query is appended at the end of the prompt :
"User's initial query: " + userQuery
Stage 4 β System Prompt Resolution
The getSystemPromptForSelectedModel function resolves which system prompt to use, following a four-level precedence order :
- Custom prompt override β user-supplied custom prompt takes highest priority
- Model-specific default β the model's configured
defaultSystemPrompt, if set - Provider-specific fallback β for OpenAI, OpenRouter, and Mistral, a concise summarized prompt
- Base default β
SIFT_CHAT_SYSTEM_PROMPT
Stage 5 β Command Processing
When a user invokes a command, the message is augmented before dispatch :
- Built-in commands: the command name is prefixed as
[COMMAND: command_name] - Custom commands: the command's prompt instructions are prepended to the user input, and any command-specific model parameters override the defaults
3.3 Chat History and Context Management#
To keep context relevant without overloading the context window, the getTruncatedHistoryForApi function applies an intelligent retention strategy :
- Always retains the first user query and first AI SIFT report as a permanent anchor
- Keeps up to 5 recent user/AI message pairs (
MAX_RECENT_TURNS = 5) for ongoing conversation continuity - Strips out loading indicators and error messages before sending history to the API
History is then serialized into provider-specific formats:
- Gemini:
Content[]with"model"role mapping - OpenAI-compatible providers:
ChatCompletionMessageParam[]with the system message prepended
3.4 AI Provider Delivery#
The toolbox supports five AI providers through a unified factory pattern :
| Provider | SDK | Special Capabilities |
|---|---|---|
| Google Gemini | GoogleGenAI client / @ai-sdk/google | System prompt passed as systemInstruction ; optional Google Search tool ; thinking budget parameter |
| OpenAI | @ai-sdk/openai with strict compatibility mode | Standard chat completions |
| OpenRouter | OpenAI-compatible interface | Custom Referer and X-Title headers |
| Mistral | @ai-sdk/mistral | Standard implementation |
| Anthropic | @ai-sdk/anthropic | Standard implementation |
Gemini uses a direct client and builds a content array with any file attachments as inlineData parts before the text prompt .
OpenAI, Anthropic, Mistral, and OpenRouter are handled through the Vercel AI SDK's streamText, which converts conversation history to CoreMessage format and conditionally appends image content for vision-capable models .
3.5 Dynamic Source Injection#
When using Gemini with Google Search grounding enabled, the system automatically tracks and corrects citation URLs:
- Source extraction: Grounding chunks are extracted from
candidate.groundingMetadata?.groundingChunksand emitted as stream events for the UI to display - Redirect correction: The
correctRedirectLinksInMarkdownfunction replaces Vertex AI Search redirect URLs with direct final URLs. It builds a normalized title-to-URL map from grounding chunks , detectsvertexaisearch.cloud.google.comredirect patterns , and resolves them using exact title matching or fuzzy matching with a 0.7 similarity threshold
4. Source Assessment System#
After every Full Check report, the SIFT Toolbox automatically extracts source citations, validates their accessibility, and surfaces reliability ratings in the UIβwithout any manual action from the user.
4.1 How Sources Are Extracted#
The parseSourceAssessmentsFromMarkdown function parses the generated Markdown report to pull structured source data :
- Locates the section: Uses a regex to find the
π΄ Assessment of Source Reliabilitysection header - Parses the table: Splits the Markdown table by rows and columns
- Extracts link data: Parses
[name](url)Markdown link syntax from the source column - Returns structured records: Each record contains the source's name, URL, assessment, notes, and rating
Each source is represented by a SourceAssessment object :
interface SourceAssessment {
index: number; // Position in the report (starting at 1)
name: string; // Source title
url: string; // Web address
assessment: string; // AI's usefulness evaluation
notes: string; // AI's analysis notes
rating: string; // Reliability score (e.g. "4β5")
linkValidationStatus?: LinkValidationStatus;
}
4.2 URL Validation#
For each extracted source, checkLinkStatus runs a multi-stage accessibility check :
| Stage | Method | Outcome |
|---|---|---|
| 1. Syntax check | URL constructor + HTTP/HTTPS protocol validation | Rejects malformed URLs immediately |
| 2. CORS HEAD request | Standard HEAD request with CORS enabled | valid on success; invalid on 4xx/5xx |
| 3. No-CORS fallback | Up to two GET requests in no-cors mode | error_checking if reachable (CORS blocked); invalid if unreachable |
The five possible validation statuses are :
| Status | Meaning |
|---|---|
unchecked | Not yet validated |
checking | Validation in progress |
valid | URL is accessible and confirmed working |
invalid | URL is broken or returns an error |
error_checking | URL may be accessible but could not be confirmed due to browser CORS restrictions |
4.3 Reliability Ratings#
The AI assigns each source a numeric reliability rating on a 1β5 scale, which may be expressed as a range (e.g., "4β5") . The RatingDisplay component converts this to a star visualization using the lower bound of the range .
The sidebar color-codes each rating for quick scanning :
| Color | Rating | Interpretation |
|---|---|---|
| π’ Green | β₯ 4.0 | High reliability β suitable for fact-checking |
| π‘ Yellow | 2.5β3.9 | Moderate reliability β cross-reference before relying on it |
| π΄ Red | < 2.5 | Low reliability β seek alternative sources |
4.4 The Assessment Pipeline#
The full pipeline from report generation to UI display :
4.5 Reading Source Assessments in the UI#
Right Sidebar
The sidebar lists all extracted sources with:
- Color-coded reliability rating
- Brief assessment snippet
- Link status dot (
LinkStatusDotcomponent) - Collapsible/expandable view for each entry
Source Assessment Modal
Click any source in the sidebar or any superscript citation index in the report text to open the modal, which shows:
- Full source name and direct URL
- Link validation status with plain-English messaging
- Star rating visualization
- Full usefulness assessment and AI analysis notes
Inline citation indices β When the AI cites a source in its report text, the toolbox automatically attaches a superscript index to the Markdown link. Clicking the index opens the Source Assessment Modal for that source .
Link status icons :
| Icon | Status | Meaning |
|---|---|---|
| β³ Animated spinner | checking | Validation in progress |
| β Green checkmark | valid | Source is accessible |
| β Red X | invalid | Source is broken or inaccessible |
| β οΈ Yellow warning | error_checking | Accessibility uncertain due to CORS restrictions β check manually |
| (empty) | unchecked | Not yet checked |
5. Chat Commands#
Chat commands let you guide the AI's analysis beyond the initial report. Eight built-in commands are available as buttons in the chat interface; you can also create your own custom commands in Settings. All commands are disabled while a response is loading .
5.1 Built-in Commands#
Another Round π#
Command string: another round
Runs an additional search pass on the same topic to surface new or conflicting information. After results appear, the AI summarizes what new information has emerged and reassesses the overall picture .
Tips:
- Run with an affirmative framing ("MMT true"), then again with a contrary framing ("MMT false") to systematically surface opposing viewpoints
- Maps directly to the Find step of SIFT
Read the Room π§#
Command string: read the room
Analyzes the structure of expert and public opinion on the topic. The AI characterizes the information environment using one of five opinion-structure categories :
| Category | Description |
|---|---|
| Competing theories | Multiple valid but incompatible explanations coexist |
| Majority/minority views | A clear dominant position exists alongside dissenting voices |
| Consensus | Broad agreement among experts |
| Uncertainty | Insufficient evidence; no clear picture has emerged |
| Fringe viewpoints | Marginal perspectives that sit outside mainstream discourse |
Best for: Understanding controversial topics, assessing whether a claim is mainstream or fringe, and identifying where genuine expert disagreement lies.
Trace Claim π£#
Command string: trace_claim
Uses gathered sources to track a claim or piece of media back to its earliest identifiable origin, revealing how the claim may have been transformed or stripped of context.
Best for: Investigating viral quotes or images, verifying attribution, and implementing the Trace step of SIFT directly.
Web Search π#
Command string: web_search
Triggers a live web search to find current information on the topic. Results are integrated into the ongoing analysis.
Note: This command requires a model with web search support. It is automatically disabled for models that lack search tool integration . Google Gemini models with the Google Search tool enabled support this command.
Context Report π#
Command string: generate_context_report
Generates a full Context Report for the artifact or subject currently under discussion, covering its online presentation, audience meaning, actual background, and topical context.
Best for: Creating educational summaries, explaining viral artifacts, and preparing contextual background before drafting a correction.
Community Note π#
Command string: generate_community_note
Generates a Community Noteβa plain-text annotation of 700 characters or fewer with 2β5 supporting linksβfocused on the context without which the artifact would be seriously misunderstood .
Best for: Social media corrections, shareable annotations for viral content, and platform-limited environments.
Discourse Map πΊοΈ#
Command string: discourse_map
Produces an interactive d3.js visualization that maps the claims, evidence, issues, and participants in the discourse around the topic. The core claim sits at the center of the graph, with related nodes clustered around it .
Best for: Understanding complex debates with many interrelated claims, visualizing argument structure, and identifying who the key participants are and what positions they hold.
Explain Simply π§βπ«#
Command string: explain_like_im_in_high_school
Reformulates the current analysis in plain language accessible to a general audience, stripping technical jargon and simplifying complex concepts.
Best for: Making fact-check findings accessible, educational contexts, and sanity-checking your own understanding by seeing a simpler version.
5.2 Custom Commands#
Users can define custom commands in Settings β Custom Commands . Each custom command has the following properties:
| Field | Required | Description |
|---|---|---|
| Name | Yes | Short identifier displayed as the button label |
| Description | No | Optional explanation of the command's purpose |
| Prompt Instructions | Yes | Text prepended to the user's message when the command runs |
| Temperature / Top-P | No | Per-command parameter overrides that replace the model's defaults |
Custom commands are saved in the application store and can be added, updated, or deleted at any time .
When a custom command is invoked, its prompt instructions are prepended to the user input and its parameter overrides replace the active model settings for that request .
When to use custom commands:
- Repetitive analysis patterns specific to your domain or workflow
- Specialized investigation techniques not covered by built-in commands
- Standardized prompt templates for team-wide consistency
5.3 Command Quick Reference#
| Command | Button Label | SIFT Step | Best For |
|---|---|---|---|
another round | Another Round π | Find | Gathering additional / opposing perspectives |
read the room | Read the Room π§ | Investigate | Mapping expert opinion structure |
trace_claim | Trace Claim π£ | Trace | Tracing claims to their original context |
web_search | Web Search π | Find | Searching for current information (Gemini only) |
generate_context_report | Context Report π | All | Educational context summaries |
generate_community_note | Community Note π | All | Social media corrections |
discourse_map | Discourse Map πΊοΈ | All | Visualizing complex claim landscapes |
explain_like_im_in_high_school | Explain Simply π§βπ« | All | Plain-language reformulations |
5.4 Effective Command Sequences#
Comprehensive investigation:
- Start with the default Full Check for an initial analysis
- Run Another Round (with an opposing search term) to stress-test the findings
- Run Read the Room to understand the broader expert consensus
- Run Trace Claim to verify the origin of any key claims
From analysis to publication:
- Run Full Check for in-depth research notes
- Run Context Report to build a structured educational summary
- Run Community Note to distill findings into a shareable annotation