Overrides the default system prompt for this chat only. Leave empty to inherit the default.
What can I help with?
Pick a model above and start chatting.
STANDARD TESTS
Web search on — costs extra
Keyboard shortcuts
What's new
Runs
Per-run rows for the conversations you pick below — model, endpoint, rounds, tool activity, verdict, tokens and cost. Sortable. Selection is for this session only.
Conversations
Request inspector
This session only — captured requests are never persisted and vanish on reload. The API key is never included; it travels only in the request's headers.
Skills & Tools
Reusable instruction packs, shared across every chat. Attach one by typing / in an empty composer, or automatically via trigger words. Attached skills are appended to the system prompt for that message.
Custom tools
Tools the model has proposed with create_tool and you've approved. Each runs in the same sealed sandbox as Run JavaScript — no network, no DOM, no file or key access — and, once enabled, is offered to the model in every conversation with tools on.
Memory
Short facts you or the model have saved. Global entries apply to every conversation; conversation entries only to this one. Applicable entries are appended to the system prompt, so the model can see them.
Lowercase letters, numbers and dashes. Type /name in the composer to attach it.
When a trigger word or phrase appears in your message, the skill attaches itself — you can remove it before sending.
Settings
Browser storage is unavailable — your key and chats will only last for this tab session.
Every provider — OpenRouter included — is an endpoint you add, edit, and can delete. Enable one to merge its models into the picker above; requests go straight from this browser to each endpoint's own address, and a key lives in the endpoint itself.
Some providers block browser requests (CORS) — use Test connection to check.
OpenAI-compatible base URL. Requests go to {baseUrl}/models and {baseUrl}/chat/completions.
Applied to any model on this endpoint with no per-model rate below. Left blank (and no per-model rate either), replies show "billed externally" instead of a false $0.00.
One rate per model beats one flat rate for the whole endpoint — the right choice whenever an endpoint serves models at different published prices. Paste a JSON object shaped like {"model-id": {"inputPerM": 3, "outputPerM": 15, "asOf": "2026-08-02", "source": "https://..."}}; this merges into the list below (existing ids are updated, others are untouched) rather than replacing it.
Named bundles — model, prompt, tools, web search, skills, and folder — for one-click starts from "New chat ▾".
Streams the thinking block and tool-call arguments live as they arrive, instead of revealing them only once the turn finishes. The token counter next to the thinking indicator always runs. Turn off for a quieter transcript.
Presets or drag the slider for a custom hue. Lightness is clamped for readable contrast in both light and dark mode.
When on, every assistant message gets a "View request" action showing the exact JSON body sent for it (system messages, tools array, memory block) — captured this session only, never persisted, never includes the API key.
A round is one model turn, which can carry several tool calls — a turn making three calls per round reaches 30 calls in 10 rounds. Set 0 for no limit. A profile can override this for one endpoint without changing the global default.
Every level is computed, recorded and shown to you regardless of this setting — the dial only governs what is said back to the model. Only counts the tool ledger can prove are ever sent: rounds, writes, reads, errors. Never token counts, context percentages or cost.
Which observations may speak to the model. Unchecking one does not stop it being detected or recorded, only sent. The prose stall heuristic is off by default and should stay off: it is the one detection in this app that guesses rather than proves, and a guess sent with the app's authority behind it is worse than silence. Tool contracts — patch_file's unique-match refusal, update_file's re-emit refusal, artifact validation, read-back — are always on and are not listed here, because switching one off would not relax the tool, it would produce a tool that silently edits the wrong match.
Accepts ChatGPT's conversations.json or a Claude export JSON. Imported chats land in an "Imported" folder; re-importing the same file skips duplicates. Capped at 500 conversations per import.
New conversations start on this model instead of whatever you used last.
Only fires while this tab is hidden, never for a chat you're already looking at.
One-time copy to a per-conversation database, kept live automatically from here on — no repeat migrations needed. Requires a fresh backup from this session first (click Backup above); Migrate refuses until you do.
Deletes the old whole-conversation copy from local storage once every conversation is freshly verified safe in the per-conversation database. Requires a successful migration first. This cannot be undone.
Merges conversations from an OpenChat backup JSON (newer copy of a chat wins). Your API key is never imported.
Clears all conversations and the tool ledger. Endpoints, keys, skills, and settings are kept. Requires a fresh backup from this session first (click Backup above) — that backup does not include your endpoint API keys, same as every export; it exists so your conversations are recoverable, not your keys.
Erases every conversation, draft, setting, and your API key from this browser.