FALCON
A zero-server, browser-native research agent that runs a real iterative loop — fanning 21 public APIs, filtering every result through a deterministic 512-dim embedding, and posting the answer as a threaded comment that builds on the one before it.
"Ask a question. FALCON iterates. Each iteration references the last. Nothing leaves your tab."
What is FALCON 5.0?
FALCON 5.0 is a single-file HTML/JS research agent that behaves like a browser-resident researcher. Give it a task in plain English and it will:
- Pick a research angle —
overview,definitions,mechanism,examples,comparisons,history and context,trade-offs and pitfalls,open questions. - Fan out across 21 wings — Wikipedia, Wikidata, DuckDuckGo, arXiv, OpenAlex, Crossref, Semantic Scholar, GitHub, Europe PMC, Stack Exchange, Hacker News, Open Library, Nominatim, REST Countries, USGS, Reddit, Lobsters, Wiktionary, Dictionary API, Datamuse, World Bank — with per-host rate limits and a 4.5 s per-wing deadline.
- Score everything with JEV — a 512-dimension deterministic embedding that ranks candidates by relevance and, crucially, by novelty against everything already in the thread.
- Synthesize a coherent paragraph — either through a locally-loaded LLM (via Transformers.js), or through a deterministic extractive fallback when no model is loaded.
- Audit the answer — every sentence is checked against the retrieved sources, producing a
groundedRatioyou can trust. - Post the result as a threaded reply, showing its angle, its sources, its confidence, its novelty, and how well it stayed grounded.
- Loop back — the next iteration re-reads the task and every prior reply, picks a different angle, filters harder for novelty, and posts again. The thread looks like a comment section, not a chat log.
- Loop stops on plateau (3 consecutive low-novelty iterations) or iteration cap (16), and you can stop it any time with
EnterorEsc. - Export a Karpathy-style JSON table of every run — its queries, sources, response, confidence, novelty, groundedness, and timestamp.
No API keys. No accounts. No telemetry. No server. One HTML file.
Quick start
-
Open the Space.
-
Type a question, e.g.:
how does kernel bypass networking work and what are the trade-offs?
-
Press Enter — the auto loop starts.
-
Watch iterations stream in. Each iteration is a threaded post with:
- The angle it chose
- Its sources (top 3)
- Confidence, novelty, groundedness percentages
- Total source count
-
Press Enter again (or Esc) to stop.
-
/export jsonto download the run table./runsto see it inline. -
Ask a follow-up in the same conversation — it uses the thread as context.
The research wings
FALCON fans 21 public API wings in parallel each iteration. Every wing is rate-limited independently, timed out at 4.5 s, and fails gracefully — the loop never stalls because one wing is throttled.
| Wing | What it brings | Host |
|---|---|---|
| wikipedia | Full-text search on the query | en.wikipedia.org |
| wikidata | Structured entity search (labels, descriptions, concept URIs) | wikidata.org |
| ddg | DuckDuckGo Lite, triple-proxied (allorigins → corsproxy → jina) | lite.duckduckgo.com |
| arxiv | Preprint search, abstract extraction | export.arxiv.org |
| openalex | Academic works, abstract reconstruction from inverted index | api.openalex.org |
| crossref | DOI-indexed scholarly metadata | api.crossref.org |
| semantic | Semantic Scholar paper search, abstract + URL | api.semanticscholar.org |
| github | Repository search, description + star count | api.github.com |
| europepmc | Life-sciences literature | ebi.ac.uk |
| stackexchange | Stack Overflow Q&A | api.stackexchange.com |
| hackernews | HN stories and comments via Algolia | hn.algolia.com |
| openlibrary | Books, authors, publication years | openlibrary.org |
| nominatim | Geocoding via OpenStreetMap | nominatim.openstreetmap.org |
| restcountries | Country demographics, capital, region | restcountries.com |
| usgs | Recent earthquakes (conditional on query terms) | earthquake.usgs.gov |
| Post titles, subreddit, upvotes (proxied) | www.reddit.com |
|
| lobsters | Tech-link aggregator | lobste.rs |
| wiktionary | Word-level extracts | en.wiktionary.org |
| dictionaryapi | Definitions | api.dictionaryapi.dev |
| datamuse | Related terms, rhymes, associations | api.datamuse.com |
| worldbank | GDP, inflation, population (conditional) | api.worldbank.org |
Conditional wings
Some wings only fire when their topic keywords are present in the query:
- europepmc —
health,medical,biology,medicine,clinical,biolog,genom - usgs —
earthquake,quake,seismic,tremor - worldbank —
gdp,economy,inflation,population,unemployment,growth
This keeps irrelevant wings from consuming rate-limit budget.
JEV — the embedding engine that makes it all work locally
Every piece of text — a source title, a snippet, the user's task, the current iteration's answer — is embedded into a 512-dimension Float32 vector using a deterministic, dependency-free algorithm.
How JEV works:
- Position-weighted unigrams — every non-stopword token contributes
1 + 0.5·exp(-i/30)at its hashed slot, so early tokens count more. - Bigrams and trigrams —
bg_andtg_prefixed hashes at 0.45 and 0.22 weight, capturing local phrase structure. - Character 3-grams — for tokens ≥ 5 chars, at 0.06 weight per trigram, catching subword texture.
- L2 normalisation — all vectors are unit-norm, so
dot(a, b)is cosine similarity.
Why this matters:
- Novelty scoring — every candidate is compared against everything the loop has seen. Anything with
1 - max(cosine(candidate, seen)) < 0.28is rejected before it reaches synthesis. This is what prevents the loop from re-answering the same question 16 times. - Relevance scoring — the top 12 novel candidates by
0.4·novelty + 0.6·relevancebecome the material for this iteration. - Groundedness audit — every sentence of the generated answer is checked against every sentence of the retrieved sources. Anything below 0.42 cosine similarity is flagged as ungrounded, and the
groundedRatiois reported to the user. - Determinism — the same text always produces the same 512-dim vector. You can replay an exported JSON run table exactly.
No model. No download. No server. Just math.
The thread UI
Every iteration appears as a threaded post underneath the original task, exactly like the reply tree of a Twitter/X thread:
you · task
└─ falcon #1 · overview
[answer paragraph]
[1] wikipedia — ...
[2] arxiv — ...
conf 62% · novelty 84% · grounded 71% · 8 sources
└─ falcon #2 · definitions
[answer paragraph]
[1] wiktionary — ...
[2] openalex — ...
conf 58% · novelty 71% · grounded 82% · 6 sources
└─ falcon #3 · mechanism
...
The dashed left border and ↳ glyph make the reply-to-reply relationship visually clear. Each post shows the specific angle it addressed, so you can read the thread as a progressive, multi-dimensional investigation.
Scroll behavior
- The terminal sticks to the bottom when you're at the bottom.
- If you scroll up to read a prior post, autoscroll is paused.
- A floating down-arrow button appears with an unseen-count badge.
- Click it (or scroll to bottom) to re-pin the terminal.
No jitter, no forced scrolls.
Commands
| Command | Effect |
|---|---|
| (just type a task) | Starts a new iterative research loop |
enter (while running) |
Stops the loop |
enter (while idle) |
Starts a new task |
esc |
Stop (or close open dialog) |
/export json |
Download the run table as JSON |
/runs |
Print the run table inline |
/model load tiny|small|large |
Load a local LLM via Transformers.js |
/model status |
Show model + capability report |
/model unload |
Unload the current model |
/stats |
Run counters, memory, cache |
/history |
Recent inputs |
/forget |
Clear the JEV memory index |
/forget-wiki |
Clear the wiki cache (openwiki-v1) |
/stop |
Stop the loop |
/g <text> |
Attach pasted text as a file |
/clear |
Wipe the thread and all runs |
/help |
Print the in-app help card |
The export format
/export json — a Karpathy-style run table you can feed to a script, diff two runs, or build a downstream evaluation set:
{
"task": "how does kernel bypass networking work...",
"startedAt": "2026-01-01T00:00:00.000Z",
"completedAt": "2026-01-01T00:03:12.000Z",
"version": "5.0.0",
"runCount": 8,
"stats": {
"avgConfidence": 0.61,
"lastGroundedRatio": 0.72,
"avgNovelty": 0.44
},
"runs": [
{
"iteration": 1,
"angle": "overview",
"focus": "kernel",
"queries": [
"kernel bypass networking overview",
"kernel overview",
"how does kernel bypass networking work overview"
],
"sources": [
{ "title": "Kernel bypass", "src": "wikipedia", "url": "...", "sim": 0.71, "novelty": 0.95 },
{ "title": "DPDK — Data Plane Development Kit", "src": "github", "url": "...", "sim": 0.68, "novelty": 0.88 }
],
"response": "Kernel bypass is a technique...",
"confidence": 0.62,
"novelty": 0.84,
"groundedRatio": 0.71,
"timestamp": "2026-01-01T00:00:04.120Z"
}
]
}
Fields per run:
iteration— the sequence numberangle— the research angle this iteration addressedfocus— the specific focus word picked from the taskqueries— the actual search queries sent to the wingssources— the top novel sources that survived filteringresponse— the paragraph posted in the threadconfidence— mean relevance of the top 3 sourcesnovelty— mean novelty of the top novel candidatesgroundedRatio— fraction of response sentences that match a retrieved source above the thresholdtimestamp— when the iteration completed
Perfect for building eval sets, comparing model vs. extractive runs, or diffing two independent investigations.
Privacy & hosting
- No backend. FALCON runs entirely in your browser tab.
- No telemetry. No analytics, no error reporting, no fingerprinting.
- No accounts. Everything is local.
- Persistence:
- Runs, memory vectors, wiki cache, attachments, and input history live in IndexedDB (
falcon-v50,falcon-mem-v50,openwiki-v1). - Query cache and input history mirror into
localStoragefor fast startup. - The loaded LLM is cached by the browser's Cache API.
- Runs, memory vectors, wiki cache, attachments, and input history live in IndexedDB (
- Network traffic is limited to the 21 wings +
cdn.jsdelivr.net(Transformers.js) +huggingface.co(model weights). Nothing else leaves the tab.
Browser support
| Feature | Requirement |
|---|---|
| Core loop | Any evergreen browser from 2023+ |
| IndexedDB persistence | Chrome, Firefox, Safari, Edge |
| WebGPU model inference | Chrome 113+, Edge 113+ (Firefox/Safari: WASM) |
| WASM model inference | All modern browsers |
| Fullscreen | All modern browsers |
| File drop | Any browser with DataTransfer.files |
Tested on: Chrome 122, Firefox 123, Safari 17.
Technical deep-dive
Rate limiting
Every wing has its own token bucket (HOST_BUCKETS) with a per-minute budget:
| Host | Tokens / min |
|---|---|
wikipedia.org |
10 |
github.com |
10 |
duckduckgo.com |
15 |
| Others | 5–15 |
When a bucket is empty, the wing throws ThrottledError and the iteration continues with whatever came back from the others. The loop never stalls on a single host.
Timeouts
| Deadline | Value |
|---|---|
| Per-wing request | 4.5 s |
| Per-iteration intent deadline | 9 s |
| Wiki search | 7 s |
| Wiki summary (batched 20/req) | 4 s |
| Model generation | ~30 s |
Novelty state
Persisted in-memory only (cheap to recompute):
seenVectors— last 500 JEV vectors from accepted novel candidatesseenTitles— normalised title set for fast deduplicationseenHashes— quick hash set for exact-duplicate rejectionplateau— consecutive iterations below the novelty floor
When plateau ≥ 3, the loop stops and reports "plateau reached — task complete".
Caches
| Cache | Storage | TTL | Keys |
|---|---|---|---|
| Query results | localStorage |
6 hours | falcon-qc-v50-<hash> |
| Wiki search + summaries | IndexedDB |
24 hours | openwiki-v1 (search, summaries, articles) |
| Memory vectors | IndexedDB |
permanent | falcon-mem-v50 (mem) |
| Input history | localStorage |
permanent | falcon-history-v50 |
| Full runs | IndexedDB |
permanent | falcon-v50 (runs, msgs, inputs, attachments) |
/forget clears memory vectors. /forget-wiki clears the wiki cache. /clear wipes the thread and all runs.
Determinism
JEV is fully deterministic — the same text always produces the same 512-dim vector. This means:
- You can replay an exported JSON run table exactly.
- Two collaborators running the same task on the same inputs will see the same scores.
- The novelty floor is stable across browsers and OSes.
- The groundedness audit is reproducible.
What FALCON is not
- Not a chatbot. Replies are threaded research posts, not conversations.
- Not a search engine. It synthesizes across 21 sources, not just one.
- Not a knowledge base. Every run is fresh — FALCON doesn't cache answers to questions (it caches source pages, which is different).
- Not a code executor. Nothing runs in a sandbox.
- Not a bundled model. You get the extractive fallback for free; the LLM is a
/model loadaway.
Attribution & license
- Author: webXOS
- Version: 5.0.0
- License: MIT
- Model library: Transformers.js (Apache 2.0)
- Source APIs: Wikipedia (CC BY-SA), Wikidata (CC0), DuckDuckGo (ToS), arXiv (various), OpenAlex (CC0), Crossref (CC0), Semantic Scholar (various), GitHub (ToS), Europe PMC (various), Stack Exchange (CC BY-SA), Hacker News (MIT), Open Library (various), Nominatim/OSM (ODbL), REST Countries (MIT), USGS (public domain), Reddit (ToS), Lobsters (MIT), Wiktionary (CC BY-SA), Dictionary API (various), Datamuse (MIT), World Bank (CC BY 4.0)
You are free to fork this Space, remix the UI, swap the wings, or embed FALCON in another tool. See LICENSE in the repo for the full text.
Additional files to ship alongside falcon.html
LICENSE (MIT)
MIT License
Copyright (c) 2026 webXOS
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
Changelog
[5.0.0] — 2026-01-01
Added
- Thread-native UI — every iteration posts as a threaded reply with
↳markers - Infinite-iteration auto loop (16 cap, plateau-stop at 3 low-novelty iterations)
- 8 research angles: overview, definitions, mechanism, examples, comparisons, history and context, trade-offs and pitfalls, open questions
- JEV novelty filtering (
NOVELTY_THRESHOLD = 0.28) so iterations don't repeat - Groundedness audit per iteration, reported as
groundedRatio /export json— Karpathy-style run table with queries, sources, scores, timestamp/runs— inline run table- Local model support (tiny / small / large via Transformers.js 3.0)
- Full off-thread scroll behavior — floating down-arrow with unseen-count badge
- Welcome card rendered inline in terminal (no popup)
- Enter = start / stop toggle
- Wiki cache (
openwiki-v1) — 24-hour TTL, batch summary fetches - Query cache (6-hour TTL) in
localStorage - Memory index (LSH-bucketed JEV vectors) in
falcon-mem-v50 - Drop
.txt/.mdattachments — FALCON answers from them directly /forget,/forget-wiki,/stats,/history,/gcommands
Fixed
- Removed the initial popup that used to appear on boot
- Enter no longer requires a non-empty input to stop the loop
- Scroll position no longer fights the user when reading prior posts
- Wiki summaries are now batched (20 per request) to reduce API calls
- Rate limits now use token buckets per host, no global stall
- Model generation is queued (max 5 in flight) to prevent pipeline overload
[4.3.0] — 2025-12-01
- Paragraph answers with
/expandinto essay - 22 API wings,
/findinfinite scroll, Wikipedia expand - Weather via Open-Meteo
- Export: json, csv, tsv, md, html, txt