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 the Terminal.
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 |
| 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
help the list below price <sym> a live Chainlink print on Robinhood Chain balance · connect · block the wallet, read only, and the chain 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.
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
A URL is fetched through a public reader (r.jina.ai) that returns the page as text, because a browser cannot read most third-party pages directly. The text is kept in your notes, up to thirty pages, and Summarise sends it to the active agent. Pages behind logins, and sites that block the reader, will not open.
On chain
Read only, and stated as such on every surface. The browser talks to the public RPC of Robinhood Chain directly, which allows browser origins, so there is no server and no key in the path.
- Prices come from the Chainlink aggregators on the chain, listed in
/feeds.jsonby symbol and address, read withlatestRoundData(). 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. - 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.
- Wallet: Connect asks the wallet for an address and to switch to chain 4663, adding it if the wallet does not know it. 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.
- Terminal:
price NVDA,pricealone lists the feeds,balance,connect,block.
Storage and privacy
- Everything lives in
localStorageunder one key,hexcomb.v1: agents, keys, chats, tasks, notes, log. - 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.
Private pay-per-use designed
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.
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 |