Blog
A Claude API chat UI that runs in your browser, no servers required
every time anthropic ships a new claude model, three or four "claude api
chat ui" projects pop up on github. most of them route your messages
through a third-party backend you have to host or trust. taskelo's byok
mode is a more honest version of that pattern: your browser talks to
api.anthropic.com directly, and there is no taskelo server in the
middle.
this post is about what that means in practice, what works, and what doesn't.
the setup
taskelo.com is a single-page web app. in the chat panel, paste an anthropic api key. that's the entire byok setup. from that point:
- the key is stored in your browser's localStorage. never sent to a taskelo server.
- when you send a message, your browser issues a
POSTtohttps://api.anthropic.com/v1/messageswith the key in thex-api-keyheader. - streaming responses come back via server-sent events. the chat panel renders tokens as they arrive.
- the request includes
anthropic-versionandanthropic-dangerous-direct-browser-access: trueheaders. that second header is anthropic's official opt-in for browser-origin calls.
we are billed against your anthropic account, not ours. there is no proxy. there is no "magic" middleware. if anthropic goes down, taskelo's byok mode goes down with it.
what the chat actually sends
taskelo's chat panel is aware of the rest of the page. specifically, each message you send includes:
- your full todo list (titles and completion status)
- the contents of the notes canvas
- the recent chat history (capped at a configurable token window)
this is what makes the panel useful for "plan out today" or "summarize where i left off" questions. claude isn't guessing — it can see exactly what's on your list.
if you want a totally context-free chat, the chat panel has a "clear context" toggle that strips the todos and canvas from the prompt. you get plain claude, just like the anthropic console.
tradeoffs vs hosted
byok mode is great until it isn't:
| byok | hosted | |
|---|---|---|
| signup | none | magic link + stripe |
| your data | your browser only | proxied through our worker |
| billing | per-token via anthropic | flat $8/month |
| model | claude sonnet 4.5 (default) | claude sonnet 5 |
| key safety | depends on your browser | we hold the key |
| works on a shared machine | risky (key in localStorage) | yes |
if you're on a personal laptop and you already have an anthropic key, byok is the right answer. if you're on a work laptop, or you want sonnet 5, or you don't want to think about per-token costs, hosted is simpler.
why anyone ships byok at all
three reasons:
- trust. lots of people are nervous about sending messages through a third-party startup's backend. byok removes that conversation entirely — there is no backend.
- cost. $8/month is fine for a lot of people, but if you only use claude a few times a week, byok will run you a fraction of that.
- portability. if taskelo shuts down tomorrow, your data is in your browser's localStorage and your billing relationship is with anthropic. there's nothing to migrate.
the cost to us as a service: byok users contribute roughly nothing to revenue. we ship it anyway because it's the right default for a local-first product. hosted exists for users who actively want hosted.
what taskelo's chat ui adds over a plain api call
if you've used the anthropic console, you know it's a fine debugging tool but not a daily-driver ui. taskelo adds:
- streaming render with markdown + code highlighting
- conversation history that persists across tabs
- a stop-generation button that aborts the fetch mid-stream
- model picker (sonnet, opus, etc.) with per-conversation override
- copy-as-markdown on any message
- todos and notes panels in the same page (the whole point of taskelo)
try it
go to taskelo.com, open the chat panel on the right, paste an anthropic api key. messages start working immediately. no signup, no email, no credit card, no taskelo backend involved.
if you'd rather not manage a key, sign in and subscribe for $8/month hosted — same chat ui, but with our key and sonnet 5.