AI Chat
Overview
Section titled “Overview”The chat rail is a conversation about the project you have open. It can read your pending changes, the repository’s translation prompts, and any key’s values in any language — and it can write translations into the columns you name.
Everything it writes is a draft, exactly like a cell you typed into yourself: you see it in the table, the Discard button drops it, and it only reaches the repository through the normal save flow.
Replies stream in as the model produces them, and each tool call appears in the transcript while it runs — so you can see what it’s doing rather than watching a spinner.
Opening the chat
Section titled “Opening the chat”- Open a project in the editor.
- Click Chat in the header.
The rail opens on the right. Its state is remembered, so it will be open the next time you launch the app; the × in its header (or the header button again) closes it.
The conversation is scoped to the repo, branch and project you’re in — see Memory and history below.
The prompts it opens with are not a fixed list: they are drawn from the table in front of you, best first. Mid-review on a PR, the first one is the keys you have not marked viewed; with unsaved drafts, it offers to review them; with a cell selected in the details panel, it offers that cell by name. Prompts that could not apply — drafts when nothing is drafted — are not shown at all.
Once the conversation has started, the composer’s placeholder becomes the next prompt worth asking, skipping anything you have already asked. Press Tab or → on an empty composer to put it in the input — the same keys that take an AI suggestion in a translation cell. It is not sent: read it, edit it, send it yourself.
Memory and history
Section titled “Memory and history”Within a conversation, the assistant sees the whole thread — including the results of the tools it already called. That is what makes follow-ups work: “now do the same for Polish” resolves against the keys it just looked up.
Across sessions, each conversation is saved per repository + branch + project — the same scoping as your unsaved drafts:
- Reopening the same branch and project resumes where you left off, after a relaunch too.
- Switching branch or project shows that scope’s conversation. The other one isn’t lost; it’s waiting when you go back.
- Closing the rail hides it. A turn that’s still running keeps running, and your half-typed message stays.
- New chat (the ✚ icon in the panel header) clears the conversation for the current scope and starts an empty one.
Each conversation is a file of its own, read only when you open that scope’s chat, so the length of one has no bearing on anything else.
It is still capped — 400 messages and 512 KB — but the budget goes to the conversation before it goes to tool output. Results older than the most recent 64 KB are replaced by a note saying the tool can be called again; the call, its name and its arguments stay, so the transcript still shows what ran. Only after that are whole messages dropped, oldest first, and never half of one — a tool call is never separated from its result.
One thing deliberately doesn’t persist: branches created by editing an earlier message. A reloaded conversation is linear. And nothing is cleaned up on a schedule — a scope’s history stays until you clear it with New chat.
What it can do
Section titled “What it can do”Ask in plain language. Under the hood the assistant has ten tools, and you can see every call it makes in the transcript — click one to expand its arguments and result.
Reading
| Ask | It calls |
|---|---|
| ”What did I change but not save yet?” | list_changed_translations — every draft and pending deletion, with the value on disk next to the new one |
| ”Why is the Italian copy so informal?” | get_translation_prompts — the repo-wide prompt plus the rules configured for that language |
| ”Find the pricing page CTA” | search_keys — matches key ids, namespaces and values, drafts included |
”What does common:cta.label say in every language?” | get_keys |
| ”What’s still untranslated in German?” | list_untranslated |
| ”Where am I?” | get_project_overview — repo, branch, project, PR, languages, counts |
Writing
| Ask | It calls |
|---|---|
| ”Set the German CTA to Jetzt starten” | set_translations — writes drafts into the columns you name |
| ”Translate these six keys into German and Polish” | ai_translate_keys — routes through the same batch translation as the Bulk AI panel, so your repo’s prompts apply |
| ”Undo the Italian drafts you just wrote” | revert_drafts |
| ”Show me untranslated Italian keys in the marketing namespace” | set_editor_view — moves the table’s language, filter, search and namespace |
That last one is worth knowing about: instead of describing rows to you in prose, the assistant can point the table at them.
What it deliberately cannot do
Section titled “What it deliberately cannot do”- Save, commit, or open a pull request. It stops at drafts; you review and save.
- Delete keys. It will tell you about deletions you’ve already marked, but it can’t mark one — a mistaken delete is not something you’d want a misread sentence to cause. Use the row’s own delete action.
- Touch a key you’ve marked for deletion. Writing to one would silently cancel the deletion, so those writes are refused with an explanation.
- Reach outside the project you have open. Every tool reads the same in-memory data the table renders.
- Let it read first. “Fix the German for the checkout keys” works better than pasting values in, because it looks the keys up and quotes the actual text back.
- Prefer
ai_translate_keysover asking for a translation inline. It carries your repository’s system prompt, the target language’s own rules, and the placeholder-preservation instructions. Just say “translate” rather than “what would this be in German?”. - Big runs belong in the Bulk AI panel. The chat caps one translation call at 60 cells — beyond that you want the progress bar and cancel button in the left rail.
- It sees drafts, not files. If you edited a locale file outside the app, reload before asking.
- Long lists get truncated. Results report the real total next to what they returned (“25 of 812”), and the assistant will narrow the query if you ask it to.