DOCUMENTATION

Everything TILIK can do, and how it does it.

Ask in plain words, get one answer with numbered sources. This guide covers asking good questions, where answers come from, Robinhood Chain and market data, your conversations, and the HTTP API.

01QuickstartYour first answer in under a minute. 02Asking wellLinks, repos, addresses, tickers. 03SourcesThe eight live sources behind answers. 04APIPOST /chat, streaming and errors.

GET STARTED

Overview

TILIK is an AI research engine for any question, and a live window into Robinhood Chain (chain ID 4663). You ask in your own words; TILIK works out what kind of question it is, checks only the sources that matter, and writes one clear answer where every live fact is tied to a numbered, clickable source.

3AI providers, automatic fallback
8live source integrations
4663Robinhood Chain ID
0chats stored on servers
Good to know

TILIK never guesses live numbers. If a source can't be reached, the answer says so instead of inventing data.

GET STARTED

Quickstart

  1. 1
    Open TILIK and ask

    Type in the box on the home page and press Enter, or press Ask TILIK to open the chat.

  2. 2
    Watch it work

    Chips show what TILIK understood (Market, GitHub, Research…), and a short list shows each source it checked and how long it took.

  3. 3
    Check the sources

    Numbers like 1 in the answer open the source they came from. The full list is under the answer.

  4. 4
    Follow up

    Ask "what about its liquidity?" or "compare it with the other one" — TILIK remembers the conversation.

Ask your first question

GET STARTED

Asking good questions

TILIK picks its sources from what you write. A few details make answers sharper:

Include…TILIK will…
A web link https://…Read that page and answer from it.
A GitHub repo (owner/repo or its link)Analyze the repository: README, structure, code, commits, issues, releases.
An address 0x… (40 hex) or a transaction hash (64 hex)Look it up on Robinhood Chain.
A token symbol like USDGFind its pools and market data. Symbols aren't unique — add the contract address to be exact.
"latest", "today", "this week"Use fresh news and web search.
"research", "compare", "in depth"Run deep research: more searches and pages, a longer answer. Slower.

Try these

  • chain
  • market
  • github
  • web page
  • news
  • research

"Try" opens TILIK with the question filled in — nothing is sent until you press Send.

HOW IT WORKS

From question to answer

01Understand

Detects the kind of question — research, code, news, chain, markets, or several at once — and which links, repos, addresses or tickers it mentions. Earlier messages in the chat count too.

02Gather

Calls only the sources that matter, in parallel, under strict time and call limits. If one fails, its backup takes over. Unsafe links are never opened.

03Answer

A model writes one answer from the gathered sources. OpenRouter goes first, then Gemini, then Groq — each tried at most once — and citations are checked before you see them.

How long does it take?

Simple questions usually take a few seconds. Deep research reads many pages and lets a reasoning model think longer, so it can take a minute or more — the steps list shows progress as it goes.

HOW IT WORKS

Sources

Eight integrations supply live data. The dot shows whether this TILIK server has each one set up right now .

Tavily

Web search for current pages and news.

web search · backup: Exa
Exa

Second web search engine. For research, it searches together with Tavily for more varied sources.

web search · backup: Tavily
Jina Reader

Reads full web pages as clean text.

page reader · backup: Firecrawl
Firecrawl

Reads heavy or script-built pages when the first reader can't.

page reader · backup: Jina
GitHub

Repositories: README, files, commits, issues, pull requests, releases, contributors.

code
News feeds

Fresh stories from curated feeds; stale news stays out.

news · backup: web search
Robinhood Chain

Blocks, transactions, addresses, tokens and contracts, read from the chain itself.

on-chain
GeckoTerminal

Pool prices, liquidity and volume for Robinhood Chain.

markets

"Set up" means the server can use it; a source can still be briefly unreachable — answers say so when that happens.

HOW IT WORKS

Citations & trust

[n]
Sourced or it's not said

Live facts come only from retrieved sources, each marked with a number you can click. Citations to sources that don't exist are removed before you see the answer.

!
Honest about gaps

If needed live data couldn't be retrieved, a notice says so and the answer contains no real-time facts for that part.

≠
Facts apart from analysis

What a source says is kept separate from TILIK's own reasoning about it.

⊘
Unsafe links blocked

Local, private-network and unsafe links are refused before anything is fetched. Instruction-like text hidden in web pages is stripped, and links in an answer that aren't sources are removed.

⚿
Keys stay on the server

API keys never reach your browser, the answers, or the logs.

ROBINHOOD CHAIN

Chain data

TILIK reads Robinhood Chain (chain ID 4663) directly over its RPC, and checks the chain ID before using any data, so a misconfigured endpoint can't feed it another chain's numbers.

Ask aboutExample
Latest blocks & activity"What's happening on Robinhood Chain right now?"
An address"What is 0x…? Is it a contract?"
A transaction"What did transaction 0x… do?"
Tokens & contracts"Show the token details for 0x…"
Coming later

Full wallet and token history for an address needs an explorer API and is on the roadmap. If the public RPC is unreachable, chain answers say so; market data and news keep working.

ROBINHOOD CHAIN

Markets & pools

Prices, liquidity, 24-hour volume and price change come from GeckoTerminal pools on Robinhood Chain, shown as cards above the answer with the time they were fetched.

  • Symbols aren't unique. Anyone can create a token called "USDG"; TILIK shows the contract address so you can check it's the real one.
  • The live pulse on the home page lists the top pools by liquidity — only pools with at least $100k liquidity, so thin or wash-traded pools aren't promoted. It refreshes every minute.
  • Not financial advice. Numbers are shown as facts with their source and time; analysis is labelled as analysis.

USING TILIK

Conversations

  • History — every chat is listed in the sidebar (the ☰ button on phones). Rename or delete one from its ⋯ menu.
  • Follow-ups — TILIK sends the recent turns of the current chat, plus the links, repos, addresses, transactions and tickers mentioned, so "it" and "that pool" resolve correctly.
  • Links to a chat — each chat has its own address (/chat/…). It reopens the chat in the same browser; it isn't a share link, because chats live only in that browser.
  • New chat — start fresh any time with New chat; earlier chats stay in the list.

USING TILIK

Privacy

Your chats are saved only in this browser (local storage), not on TILIK's servers. Deleting a chat — or clearing your browser's site data — removes it for good. To answer, the server receives your question and the recent turns of that chat, and the sources it fetches see only the queries needed to answer.

Tip

Don't paste passwords, private keys or seed phrases into any chat. TILIK never needs them.

API

Ask: POST /chat

The web app uses the same HTTP API you can call yourself. Send JSON; get the answer as JSON, or as a live event stream. Replace http://localhost:8787 with your TILIK address. If the server's owner turned on an access key, add Authorization: Bearer <key>.

curl -s http://localhost:8787/chat \
  -H "content-type: application/json" \
  -d '{"message": "What is the price of USDG on Robinhood Chain?"}'

Request body

FieldTypeDescription
message requiredstringYour question, 1–8,000 characters.
streambooleanStream events as they happen (Server-Sent Events). Default false.
mode"auto" | "research"research forces deep research. Default auto.
modelstringauto, a provider (openrouter, gemini, groq) or provider:model from GET /models. Default auto.
strictModelbooleanNever fall back to another model. Default false.
historyarrayEarlier turns: { "role": "user" | "assistant", "content": "…" }. Up to 50 items, 24,000 characters in total.
context.entitiesobjectThings mentioned earlier, so follow-ups resolve: urls (≤5), githubRepos (≤3), addresses (≤5), txHashes (≤3), tickers (≤5).

API

Streaming

With "stream": true the response is an event stream (text/event-stream). Events arrive in this order:

EventWhat it tells you
request.startedThe request id.
intent.detectedWhat kind of question it is.
plan.createdWhich sources will be checked.
statusA short progress message.
tool.started / tool.completedEach source call, with its result and time.
source.discoveredA source that may be cited.
model.selectedThe model writing the answer.
response.deltaThe next piece of answer text (text).
response.completedThe full final response (same shape as the JSON answer).
errorSomething failed; error.kind and error.message.
const res = await fetch("http://localhost:8787/chat", {
  method: "POST",
  headers: { "content-type": "application/json" },
  body: JSON.stringify({ message: "Latest crypto news", stream: true }),
});
const reader = res.body.getReader();
const decoder = new TextDecoder();
let buffer = "";
for (;;) {
  const { value, done } = await reader.read();
  if (done) break;
  buffer += decoder.decode(value, { stream: true });
  let cut;
  while ((cut = buffer.indexOf("\n\n")) >= 0) {
    const block = buffer.slice(0, cut);
    buffer = buffer.slice(cut + 2);
    const event = block.match(/^event: (.*)$/m)?.[1];
    const data = JSON.parse(block.match(/^data: (.*)$/m)?.[1] ?? "{}");
    if (event === "response.delta") console.log(data.text);
    if (event === "response.completed") console.log(data.response.sources);
  }
}

API

The response

The main fields of a JSON answer (and of response.completed):

{
  "id": "4975f8b8-…",
  "type": "market",            // normal | research | github | onchain | market | combined
  "answer": "USDG trades at about $1.00 … [1]",
  "grounded": true,            // false: needed live data couldn't be retrieved
  "sources": [
    { "id": 1, "title": "…", "url": "https://…", "domain": "…",
      "authority": "direct", "snippet": "…", "retrievedAt": "…" }
  ],
  "citations": { "used": [1], "invalid": [] },
  "data": { "market.data": [ … ] },   // structured data for cards
  "toolRuns": [ … ],                  // each source call: status and time
  "model": { "provider": "openrouter", "model": "…", "fallbackUsed": false },
  "timings": { "totalMs": 6400, "toolsMs": 2200, "llmMs": 4100 },
  "warnings": []
}

API

Other endpoints

GET/health

Whether each AI provider and source is set up (true/false only — never keys or settings).

GET/models

The model choices you can pass as model.

GET/api/pulse

The home page's live pulse: latest block, top pools and headlines. Cached for a minute; no AI involved.

curl -s http://localhost:8787/health
# {"status":"ok","providers":{"openrouter":true,…},"tools":{"tavily":true,…}}

API

Errors & limits

Errors are JSON: { "error": { "kind": "…", "message": "…" } } — never stack traces or internal details.

StatusKindMeaning
400validationMissing or too-long message, or invalid fields.
401unauthorizedThis server requires an access key.
413validationThe request body is larger than 256 KB.
429rate_limitToo many requests — wait the seconds in the Retry-After header.
503variesNo AI model could answer right now. Try again shortly.
504timeoutThe request passed its 120-second deadline.

Limits on the public site

20questions per minute per visitor
5deep-research questions per minute
8,000characters per message
120 smaximum time per answer

Each source and AI provider also has a daily budget, so a busy day can't run up unlimited costs. A self-hosted server can change these limits.

HELP

Troubleshooting

"TILIK is busy right now"

You've hit the per-minute limit. Wait a minute and ask again.

"TILIK's AI models aren't available right now"

Every AI provider failed or is at its daily budget. TILIK already tried each one once; try again in a moment.

"That took too long"

The answer passed the 120-second deadline — usually a large research question. Try a narrower question, or ask about fewer things at once.

"Some live data couldn't be retrieved"

A source was unreachable, so that part of the answer has no real-time facts. The steps list shows which source failed.

Live chain data shows "unavailable"

The public Robinhood Chain RPC isn't responding to the server. Market data and headlines are unaffected.

The page looks outdated after an update

Reload once with Ctrl+F5 (Cmd+Shift+R on Mac).

Is this financial advice?

No. Market and on-chain data are shown as facts with their sources and time. Always do your own research.

Still stuck? TILIK can explain itself too.

Ask TILIK