Husearch — Feature Summary

Last verified against the codebase: 2026-06-11. This document describes what is actually implemented and live, including operational limits and cost drivers, so it can be used as ground truth for planning, financial modelling, and strategic decisions.

What It Does

“Replit for humanities research” — an all-in-one workspace where researchers investigate, write, annotate, cite, and export without leaving the platform. Submit a research question, and four specialist AI agents investigate it in parallel. A synthesizer merges their findings into structured outputs — briefs, bibliographies, notes, summaries, and full agent transcripts. All research is stored, searchable, and organized by project and chapter. The platform extends beyond research into writing, annotation, citation management, data visualization, collaboration, and manuscript export.

Research Engine

Four Claude-powered agents run concurrently on every query:

An orchestrator tailors sub-prompts per agent, and a synthesizer resolves contradictions across all four outputs into a unified research brief. Follow-up queries can build on prior sessions for iterative investigation: “Follow up” on a finished session (in the Library reader or on a result in the research feed) files the next run with it as its parent.

Limits: max 2 running research sessions per user across all server instances (MAX_CONCURRENT_RESEARCH_PER_USER) and 3 per instance (MAX_CONCURRENT_RESEARCH); per-agent 5-minute hard timeout and 90-second idle timeout; up to 5 tool-calling rounds per agent; max query length 2,000 characters (the pipeline limits are defaults of RESEARCH_* variables, ADR-0046). All external API calls (Claude, CrossRef, FRED, etc.) have retry logic with backoff and human-readable error messages; data providers sit behind a circuit breaker (opens after 3 consecutive upstream failures — 5xx, 429, timeout — for 10 minutes).

Per-Project Research Focus

Each project can configure a “Research Focus” (discipline, specialization, key theories, regions, time period, key thinkers, critical lens, output emphasis, custom instructions). The orchestrator and all five agent prompts are customized at runtime from this config; projects without one use discipline-neutral base prompts.

Source Restriction Modes

Researchers control what the agents draw from:

The marker vocabulary (provenance tags, [HIGH]/[MEDIUM]/[LOW] confidence tags, claim/evidence and contradiction/convergence markers, and the citation keys [REF: R1] / [CITE: R1] that tie the brief’s citations to bibliography entries) has a single owner in shared/research-markers.js, used by both server and client.

Citation Verification

After synthesis, citations are automatically verified against the CrossRef API; when CrossRef has no match or is down, OpenAlex and then Semantic Scholar are asked before a citation is marked unverified. Each bibliography entry gets a badge, joined to it by its citation key: Verified (DOI resolves, metadata matches), Partial match, Unverified (flagged for manual review), Pending (verification incomplete, e.g., CrossRef temporarily down), or Retracted (the publisher or the Retraction Watch database, via CrossRef, or OpenAlex, records a retraction). Web pages the agents cited through web search are listed in the bibliography and checked for reachability (Link reachable / Link unreachable). Researchers can manually override unverified and unreachable entries. Lookups are cached in a PostgreSQL table. See ADR-0045.

Evidence Chains

The synthesizer tags each claim with its supporting evidence and source agent. A claim-evidence parser extracts these into structured records, so any synthesized claim can be traced back to the specific agent output and passage that supported it.

Reasoning Trace

The full pipeline captures timestamped, structured events — orchestration decisions, agent progress, tool calls/results, fallbacks, retries, contradiction resolutions — built mechanically from callback traces (not LLM-generated) and stored as JSON. The transcript tab displays this as an interactive timeline. Each trace event also carries per-call token usage (input/output/cache-read/cache-write).

Reference Extraction (Extend)

Optional integration with Extend (extend-ai) extracts structured reference lists (journalArticle, book, bookSection, conferencePaper, thesis, report, webpage) from uploaded documents. Disabled unless EXTEND_API_KEY/EXTEND_PROCESSOR_ID are set.

Workspace Modes

The center panel is driven by a mode registry. Seven tab modes — Research (query), Annotate, Library, Write, Map (knowledge graph), Visualize (diagram canvas: concept maps, flowcharts, cause-effect, timelines, comparisons, hierarchies), Discover (federated academic paper search) — plus two sidebar modes: Analytics (writing productivity dashboard) and Timeline (project activity timeline). The research feed stays mounted across mode switches; heavy modes are lazy-loaded. A command palette (⌘K / Ctrl+K, or “Go to…” in the top bar) jumps to any mode, project, chapter, research session or source; inside the chapter editor the same keys insert a link.

Writing & Editing

Chapter Editor

Plate.js (Slate-based) rich text editor with ~29 plugins:

Track Changes & Suggestions

Track-changes mode with suggestion controls and bulk accept/reject. Insertions and deletions are reviewed visually before committing.

Collaborative Editing

Real-time collaborative editing via Y.js (CRDT) with @slate-yjs/core binding and remote live cursors. Server-side WebSocket sync with Y.Doc persistence: an LRU cache holds up to 200 live docs; evicted docs are snapshotted to a PostgreSQL table and reconciled against canonical chapter content on reconnect.

AI Writing Assistance

In-editor AI tools: Expand (outline → prose), Style check (passage or document-wide), Transition generation, Abstract generation, Detect uncited claims, and Analyze (argument strength).

PDF Annotation

Upload PDFs (up to 100 MB; chapter attachments up to 50 MB), view with text layer, highlight with color-coded annotations, add notes, tag highlights. Annotations are embedded for semantic search and can be passed as context to research queries. The full text of every uploaded PDF is indexed in the background (page-attributed passages, embedded locally), so research agents can find and cite it. AI annotation synthesis summarizes highlights from a source.

Footnotes & Endnotes

Both footnotes and endnotes with independent numbering, citation-linked notes formatted through the CSL processor (citeproc), manual notes, footnote↔endnote conversion, automatic Ibid./short-form at export per Chicago 17th edition, and a notes list panel with click-to-navigate and batch re-format.

Document Comments

Threaded comments anchored to text ranges, with create/resolve/delete and multiple concurrent threads.

AI Peer Review Agent

A Claude-powered reviewer produces structured feedback anchored to exact quoted passages, categorized (argument, evidence, clarity, structure, citation, methodology, grammar), with open/resolved/ignored tracking. Supports full-chapter or selection review, context-aware follow-up rounds that see prior comments, threaded replies, and review-run history.

Organization

Knowledge Synthesis

Connection Discovery & Knowledge Graph

A connection engine computes pairwise similarity between research sessions, annotations, and snippets using local Transformers.js embeddings. Connections are classified by cosine-similarity strength: Strong (> 0.55), Related (0.42–0.55), Potential (0.33–0.42). AI-generated labels describe each connection in plain language; researchers can confirm, dismiss, or manually create connections. Keyword-matching fallback if embeddings fail. A knowledge graph view (react-force-graph-2d) visualizes the network per project, with a keyboard-navigable node list beside the canvas that shares its selection.

Argument Mapping

The database keeps an argument model per chapter (node types thesis, claim, evidence, counter-argument, rebuttal, qualifier; edge types supports, contradicts, qualifies, depends on), which the example project seeds. It has no UI and no HTTP API: the unmounted ArgumentCanvas and then the uncalled /api/arguments routes were removed in the 2026-09-29 code-quality pass. Visual mapping in the app is the Visualize mode’s diagram canvas.

Search

Live Data Connections

Economic Data Providers

FRED (free key required), World Bank, IMF, OECD, Eurostat, BIS, DBnomics (no keys), UN Comtrade (optional key).

Academic Paper Providers

Semantic Scholar (optional key), OpenAlex, CrossRef, arXiv (no keys), CORE (optional key), Unpaywall (no key).

Primary Source & Cultural Heritage Providers

Internet Archive, Library of Congress (no keys), DPLA, Europeana (optional keys).

API keys are optional throughout — a provider whose key is unset is simply omitted from the agent’s toolset, and research runs with the rest. Provider responses are cached in PostgreSQL with configurable TTL; if a service is down after retries, stale cached data is returned with a warning. Full provider table in docs/data-providers.md.

Specialized Chart Templates

Beyond basic line/bar/scatter, the editor includes social-science publishing templates: Coefficient Plot (regression results with confidence intervals), Event Study Plot, Difference-in-Differences, Marginal Effects Plot, and Choropleth Map. All default to grayscale-friendly, print-safe formatting with source attribution lines.

Source Criticism (Historians)

Structured source evaluation per upload: external criticism (provenance, archive/collection, date, authorship, document type, language), internal criticism (purpose, audience, perspective, reliability), and classification (relic vs. narrative; primary/secondary/tertiary). AI-assisted pre-population suggests values from the document text; evaluations are editable, never auto-confirmed.

Citations & Zotero Integration

Document Import

DOCX (Mammoth), Markdown (with front matter), Notion exports, and Scrivener projects — via a pluggable importer registry. All imports logged for audit.

Template Gallery

Chapter templates by category: Working Paper, Dissertation, Book Proposal, Grant Proposal, Journal, and user-created Custom templates (creatable from existing chapters).

Writing Analytics

Session tracking with Pomodoro timer mode, cumulative word counts and pace, consecutive-day streaks, calendar heatmap, per-chapter word targets, and detailed activity reports. An email reporter service exists for scheduled activity summaries.

Export

(No direct PDF export yet — react-pdf is used for viewing/annotation only.)

Collaboration & Sharing

Access control follows a uniform four-source rule enforced in the repository layer: owner → organization → collaborator → share-token.

Accounts & Auth

Progressive Web App & Offline Support

Marketing & SEO

The landing page is pre-rendered to static HTML at build time (Vite SSR + prerender script) with react-helmet-async meta tags, while app routes load the SPA shell. There are currently no pricing, billing, or subscription pages.

Onboarding & Help

Error Handling

Accessibility

ARIA labels and aria-live regions, semantic landmarks, keyboard navigation with skip-to-content, light and dark mode. Automated axe-core checks run in both the client unit suite and the e2e suite (critical-violation assertions); a comprehensive WCAG 2.1 AA audit has not been done.

Operational Profile

LLM usage shape per research run

A research run makes these Claude calls:

  1. Orchestrator — 1 call (query analysis + 4 sub-prompts), effort high
  2. Four specialist agents, all launched at once under one Promise.all — each an agentic tool-calling loop of up to 5 rounds (so 1–5+ LLM calls per agent, plus tool executions against free external APIs), effort medium, 16k output tokens each, individual tool results capped at 12,000 chars
  3. Synthesizer — 1 call merging all four outputs, effort high, 32k output tokens
  4. Background post-processing: embeddings are generated locally (Transformers.js, no API cost); citation verification hits CrossRef (free)

Usage observability

Per-session token usage (input/output/cache-read/cache-write, per stage and per call) is persisted in agent logs and trace events, and one structured [llm] line is logged per API call (model, latency, tokens, cache hits). With ARIZE_API_KEY + ARIZE_SPACE_ID set, every LLM, tool and retrieval call is also traced to Arize AX (OpenTelemetry + OpenInference): one trace per research run (orchestrator → four agents → synthesizer, grouped by project, scored with a citation_grounding annotation, stamped with the prompt version) and one per AI request elsewhere (writing assists, review, RAG search, …), each carrying the user and the feature. OPENINFERENCE_HIDE_INPUTS/OUTPUTS mask user content; recorded runs feed an Arize dataset and experiments (server/scripts/arize-*.mjs). /api/health exposes live session count, Y.Doc cache stats, memory, and disk — without pinging the database (preserves Neon auto-suspend).

Quotas and rate limits

Limit Value
Concurrent research sessions 2 per user (all instances); 3 per server instance
LLM-invoking endpoints (start research, AI review, writing assist, …) 10 req/min
Uploads/imports; exports and other heavy work 20 req/min each
Auth endpoints 30 req/15 min
Share endpoints 20 req/min
General API 120 req/min
Per-user file storage quota 1 GB (USER_FILE_QUOTA_MB)
PDF upload 100 MB; attachments 50 MB

Request budgets are counted per signed-in user (per IP for requests without one) and per server instance.

Infrastructure

Testing

Tech Stack

What’s Not Yet Implemented