Docs
How the comb works
Everything here is stated as it is today. Where a feature is designed rather than built, the page says so.
Getting started
- Open the comb. Static files, no account, nothing installed. The first load makes one agent, Scout.
- Add a key under Settings for Anthropic, OpenAI, Groq or Venice. It is stored in this browser's local storage and sent only to that provider's API.
- Make an agent: a name, a provider and model, a system prompt. Set it active and start in Chat, or open the Terminal panel from the top bar.
Agents
An agent is a record on this device: name, provider, model, prompt. The active agent answers the chat, the terminal's free text, the ask command, the code explainer and any task that names it. Agents are exported and imported as part of the comb's JSON.
Providers and models
| Provider | Endpoint the browser calls | Models offered |
|---|---|---|
| Anthropic | api.anthropic.com/v1/messages, with the direct-browser-access header | claude-fable-5-1, claude-opus-5, claude-sonnet-5, claude-haiku-4-5 |
| OpenAI | api.openai.com/v1/chat/completions | gpt-5, gpt-5-mini, gpt-4.1, gpt-4.1-mini; the request uses max_completion_tokens, and gpt-5 models ignore the temperature setting because OpenAI allows only their default |
| Groq | api.groq.com/openai/v1/chat/completions | llama-3.3-70b, llama-3.1-8b, deepseek-r1-distill-70b, qwen-2.5-32b |
| Venice | api.venice.ai/api/v1/chat/completions | llama-3.3-70b, llama-3.1-405b, deepseek-r1-671b, qwen-2.5-vl |
The call carries your key in the request header, from your browser to the provider. HEXCOMB has no server in the path and never sees it. All four providers answered a browser preflight from this site's origin with permission on 10 September 2026, so browser calls work with each of them today. If a provider ever withdraws that, the chat shows the refusal as a system line, and the relay, which calls from a server, still works.
Code
JavaScript runs on this device, inside a Web Worker with no DOM, no network and a five second limit. console.log and the function's return value are the output. Anything else (Python, Go, Rust, Ruby, Bash) is sent to the active agent, which reports what the program would print. That is an explanation, not an execution, and the page labels it so.
Terminal
The terminal is a panel at the bottom of the comb: the Terminal button in the top bar opens and closes it, the − and + buttons and Max set its height (or drag its top edge), the size is remembered on this device, and it keeps its history while you move between cells. /app/terminal opens the comb with it already open. The context panel on the right, where a cell has one, shows what goes in with a message, the pages you have read, or a task's recent runs.
help the list below price <sym> a live Chainlink print on Robinhood Chain balance · connect · disconnect · block the wallet, read only, and the chain signin <email> · code <n> · signout a wallet through Privy, read only whoami who you are here, and which agent is active agents every agent on this device use <name> make one active tasks scheduled tasks and their run counts keys which providers have a key (never the key itself) ls what is stored on this device run <js> run JavaScript in the worker ask <text> hand text to the active agent open <url> read a page as text and keep it in notes clear clear the screen
Anything not on that list goes to the active agent as a message.
Tasks
A task is a goal, an agent and an interval: once, or every 5, 15, 30 minutes, hour or day. A scheduler ticks every twenty seconds while the comb is open and runs what is due: the agent gets the goal and its last three steps, does the next step, and the output is logged on the task. A reply that begins with DONE switches the task off. Close the tab and this scheduler stops. A task that has to outlive the tab goes on the relay, below, and that is opt in.
The relay live
A small service that runs a task while your browser is closed. Choose "On the relay" when you schedule a task and the goal, the agent's brief and model, the interval and that provider's key are sent to it. What the relay does with the key, in plain words:
- It stores the key encrypted at rest, and decrypts it to make each call to the provider. So the relay can read your key at run time; a service that could not would not be able to run anything for you.
- It never shows the key back, never logs it, and deletes it when you delete the task. Pausing keeps it; deleting removes it.
- Each task has its own owner token, kept in this browser. Only a browser holding that token can read, pause, resume or delete the task. Export carries the tokens with it.
- A task stops itself after five failed calls in a row, and a one-off task stops after its run. Runs are kept, fifty per task.
- Ten tasks per owner, goals under 2,000 characters, the same intervals as the tab. Once is allowed and runs within a minute.
- Webhook out: give a relay task an https URL and it receives a POST after every run, with the task and the run as JSON. Eight seconds, no retries, the last status shown on the task. Private and loopback addresses are refused.
- Webhook in: every relay task has a trigger URL, copied from its card. A POST to it with the owner token in
x-hx-ownerruns the task now. Anything that can send a request can drive an agent: a cron, a form, another agent.
Tasks that run in the tab can notify you when they finish while the tab is in the background; switch that on in Settings and the browser asks for permission once.
A free agent on Telegram live
The other way to run an agent: not in your browser with your key, but on the relay with ours, talking in Telegram. Deploy one in four steps: pick a template (Scout, Researcher, Community, Writer), give it a name and a brief, paste a bot token from BotFather, deploy. What happens then, in plain words:
- The bot token is stored on the relay encrypted at rest and decrypted to talk to Telegram as your bot. The relay can read it at run time; it never shows it back and never logs it. Deleting the agent deletes the token; revoking the token in BotFather stops the agent.
- The model is ours and free to you. The /free page says when one is connected. Until then every agent still runs: it answers about any ticker with a Chainlink feed on Robinhood Chain from the same snapshot the comb uses, and says its model is being connected for anything else.
- A ticker named in a message goes to the model with its dated print, the same way the comb's chat does it. Equity feeds pause outside US market hours and the agent says so.
- We keep the agent's name, template and brief, message counts, and any alert levels and digest times per chat id. The last twelve turns of each chat stay in memory for context, are never written to disk, and are gone when the relay restarts.
- In a private chat the agent answers everything. In a group it answers when mentioned, replied to, or sent a command;
/start,/helpand/price SYMwork everywhere. When it is added to a group it introduces itself once, with the three things worth trying;/helpin the group shows that card again. Telegram's privacy mode means a bot sees only mentions and commands unless a group admin turns it off in BotFather or makes the bot an admin; the card says so. - While nobody is talking:
/alert NVDA above 220(orbelow) sends one message when a print crosses that level, then forgets itself; up to ten per chat,/alertslists them,/alert clearremoves them./digest 09:00 NVDA TSLA SPYsends those prints every day at that UTC time, up to twelve tickers;/digest offstops it. Levels and times are kept per chat id on the relay, checked every thirty seconds against the same price snapshot the comb uses. - Limits: three agents per browser, ten per address per day and twenty deploy attempts per address per day, sixty messages per chat per day, six hundred per agent per day, one message per chat every one and a half seconds; all reset at midnight UTC. The demo agent everyone tries first has its own, larger daily limit. The relay takes two hundred agents in all for now, and has a daily ceiling on model calls across every agent: past it, agents answer prices only and say the model rests until midnight, while alerts and digests keep working. For the per-address counts the relay keeps a salted hash of the address, never the address itself.
- An owner token, minted on the first deploy and kept in this browser's local storage, is what pauses, resumes or deletes your agents. Clearing site data loses it; the agents keep running until their token is revoked in BotFather.
- The web: when a question needs current information or facts about a page, the agent runs one search through the same keyless public reader the comb's Browser cell uses, reads the top two results, and answers naming the source. A site named in the question is read first.
/search wordslists results and/read linksummarises a page on demand. Twenty searches or reads per chat per day; a searched answer costs two model calls instead of one; private and internal addresses are refused. - Across devices, optional: sign in with an email through Privy on /free and attach your agents to that account; on another device, sign in and recover them, which hands them to that browser's owner token. The relay confirms the sign-in with Privy and keeps a salted hash of the account id, never the email.
- Where to talk: the HEXCOMB Telegram group, where the demo bot lives and where to report what you find; announcements are on the channel.
- What it is not: no trading, no wallet, no signing, no token. An agent that talks.
Installing the comb
The site is an installable web app. On a phone, use the browser's Add to Home Screen; on desktop Chrome or Edge, the install icon in the address bar. It opens on the comb, full screen, and the shell keeps working offline; the model calls, the chain and the relay still need a network, as they must.
If you would rather the key never left this device, keep tasks in the tab. Both kinds are listed on the Tasks page, separately.
Sharing an agent
Share on the Agents page copies a link that carries the agent's name, provider, model and brief in the address itself, and never a key. Anyone who opens the link is asked whether to add that agent to their comb. Post the link anywhere; there is no marketplace server because the link is the listing.
Chat
- Replies stream in as they are generated. Stop cuts a reply short and keeps what arrived.
- Code blocks render as code, and a click on one copies it.
- The paperclip attaches one text file of up to 200KB; it goes in with the next message, named.
- A ticker with a Chainlink feed on Robinhood Chain, named in a message, goes in with its live print. See On chain.
Browser
One box. Words search the web; a link reads a page. Both go through a public reader (r.jina.ai) that returns pages as text, because a browser cannot read most third-party pages directly. Search reads DuckDuckGo's lightweight results page the same way and lists the links; Read on a result, or open <n> in the terminal, reads that page. Read pages are kept in your notes, up to twelve, and Summarise sends the latest to the active agent. Pages behind logins, and sites that block the reader, will not open. No key is involved.
On chain
Read only, and stated as such on every surface. Prices come as one snapshot: a small service of ours reads every feed from the chain every 30 seconds and serves the same JSON to every visitor, so a page costs one request instead of a burst. If that snapshot is missing or older than two minutes, the browser reads the public RPC of Robinhood Chain directly, which allows browser origins. Balances and the wallet always go straight to the RPC. No key is involved on either path.
- Prices come from the Chainlink aggregators on the chain, listed in
/feeds.jsonby symbol and address, read withlatestRoundData(), by the snapshot service or by the browser. The print's age is shown; equity feeds carry a 24 hour heartbeat and pause outside US market hours, so an evening print can be hours old and says so. - The board lists every USD feed on the chain in three groups: the stocks and ETFs tokenized by Robinhood, the crypto that lives on the chain (ETH, the wrapped and staked forms of BTC and ETH, LINK, ENA), and the dollars (USDG, USDC, USDT, USDE, USDS, EURC). The two SYRUP exchange-rate feeds are not prices and are left out. All of it loads in a few batched RPC requests.
- Since mainnet: typing in the box narrows the board; a tap on a row, or Look up, opens it in place with the move since Robinhood Chain mainnet, 1 July 2026. The aggregator keeps every round it printed, so the comb searches its round ids with
getRoundData(), fifteen probes per batch, until it finds the first print on or after that date, and compares. The print it finds never changes, so it is kept on this device and later lookups skip the search. The "then" price and its date are shown next to the percentage; a feed that started later says "first print on chain" with that date instead. Nothing off chain is consulted. - Context: a ticker named in a chat message, NVDA or $SPY, pulls its live print into the message as a dated line before the model sees it. Up to four tickers per message.
- Sign in: an email code through Privy (a Google account is coming soon) gives you a wallet on chain 4663 without installing anything. The keys are held in Privy's wallet frame, never by this site. The comb reads that wallet's ETH and USDG balances and nothing more; it has no code path that asks the wallet to sign.
- Connect a wallet: for a wallet you already have. Connect asks it for an address and to switch to chain 4663, adding it if the wallet does not know it, then reads the ETH balance and the USDG balance. It never requests a signature or an approval; there is no transaction anywhere in the site. Disconnect wallet, shown while a wallet is connected, drops the address from the page and asks the wallet to forget this site, so the wallet will ask again next time.
- Terminal:
price NVDAprints the price and the move since mainnet,pricealone lists the feeds by group,balance,connect,signin you@example.comthencode 123456,signout,block.
Storage and privacy
- Everything lives in
localStorageunder one key,hexcomb.v1: agents, keys, chats, tasks, notes, log. Storage is per site address: a key entered on hexcomb.vercel.app is not present on hexcomb.xyz, and the other way round. - Export writes that object to a JSON file. Import replaces it. Wipe deletes it.
- Clearing site data in the browser has the same effect as Wipe. There is no copy anywhere else.
- The site sets no cookies and loads no analytics of its own. The sign-in library is fetched only when you press a sign-in button; it talks to Privy alone and keeps its session under
privy:keys in the same local storage. Sign out removes them.
Private pay-per-use coming soon
The shielded payment flow on Robinhood Chain is written down on the private pay page. Nothing on this site takes money today, no contract is deployed for it, and there is no token. A token launches only if the free tier outgrows what the relay can carry, and then only as the key to higher limits; the roadmap states the condition.
Robinhood Chain
| Chain | Robinhood Chain, id 4663, an Arbitrum Orbit L2 |
| Dollar | USDG, 6 decimals, 0x5fc5360d0400a0fd4f2af552add042d716f1d168 |
| Public RPC | https://rpc.mainnet.chain.robinhood.com |
| Explorer | robinhoodchain.blockscout.com |