startRoomDiscussion:"Start a discussion with {name}",
startBotWork:"Start working with {name}",
roomWillReply:"{names} will all reply.",
botWelcome:"Send a message and it will get it done on its own computer.",
remembered:"Remembered",
remember:"Remember",
working:"{name} is working…",
copyCode:"Copy code",
copiedCode:"Copied",
copyMessage:"Copy",
copiedMessage:"Copied",
anotherConversationQueued:"Another chat is running, so this one is queued.",
workingStep:"{name} is working… {step}",
queuedMessages:"{count} more messages queued",
pausedUserControl:"You’re controlling the screen, so {name} is paused. Press “Release control” when you’re done and it will continue from here (queued messages too).",
pausedNeedsUser:"{name} needs you on the screen (sign-in or verification). Press “Take over”, then “Release control” when you’re done.",
releaseAndContinue:"Release and continue",
attachFile:"Attach file",
attachFileHint:"Images go to the model on this message. Other files land in the computer inbox and are deleted after two hours.",
attachTooMany:"Up to 4 attachments at a time",
attachTooLarge:"Each file must be 10 MB or smaller",
attachType:"That file type can’t be attached",
attachRemove:"Remove {name}",
attachedFile:"Attached {name}",
attachDrop:"Drop to attach",
teachTask:"Teach a task",
teachTaskHint:"You demonstrate once; it turns that into a skill",
teachNeedsBot:"Choose a bot first",
taughtSkills:"Taught skills",
goalCommandHint:"Keep planning and executing until it’s verified or it needs you",
searchSkills:"Search skills",
noMatchingSkills:"No matching skills",
teachDialogLead:"You’ll drive the screen while {name} watches: which controls you click, what you type, which pages you visit. It becomes a skill about intent and flow, not replayed coordinates.",
teachGoalLabel:"What are you demonstrating? (one sentence)",
teachGoalPlaceholder:"For example: open the STAR training system, finish the assigned videos, and complete the quiz",
teachTip1:"Work at a normal pace. Extra clicks are ignored.",
teachTip2:"Values that change (search terms, names, dates) can become parameters — use a real example while you demonstrate.",
teachTip3:"Password fields are not recorded. Sign in before you start if you need to.",
startDemo:"Start demo",
finishDemo:"Finish demo",
teachingBadge:"Recording",
teachingComposerHint:"Recording: finish the demo before sending a message",
teachingLive:"Learning: {goal}",
teachingHint:"The screen is yours — work on the right (or enlarge it). Press “Finish demo” when you’re done.",
teachingCaptured:"{count} actions captured",
distilling:"Turning the “{goal}” demo into a skill…",
skillDraftTitle:"New skill draft",
skillDraftFrom:"From {count} actions",
skillName:"Skill name",
skillNamePlaceholder:"For example: Complete STAR training course",
skillInputs:"Inputs",
skillSteps:"Steps (intent, editable)",
moreSteps:"…and {count} more",
editSteps:"Edit steps",
skillCheck:"How to know it’s done",
skillDistillFailed:"The model couldn’t tidy this up. This list is from the raw actions — edit before saving.",
discard:"Discard",
testRun:"Try it",
saveSkill:"Save skill",
messageTo:"Message {name}",
chooseConversationFirst:"Choose a chat first",
stopConversation:"Stop",
editSkill:"Edit skill",
editSkillFull:"Full edit",
runSkillNamed:"Run “{name}”",
skillEditLead:"Write this for the bot: intent and on-screen wording, not coordinates. One item per line.",
skillIntent:"Intent (what this skill should achieve)",
skillWhenToUse:"When to use it",
skillInputsLabel:"Inputs (one per line: name: description | e.g. example)",
skillInputsPlaceholder:"courseName: course title | e.g. Workplace Bullying Prevention (2026)",
skillPreconditions:"Preconditions",
skillStepsLabel:"Steps (one per line; use → for what you should see)",
skillStepsPlaceholder:"Click “Next” → page number increases; if Next is locked, wait until it enables",
skillHowToCheck:"How to know it’s done",
skillWhatToReturn:"What to report when finished",
skillCautions:"Cautions (one per line)",
deleteSkill:"Delete skill",
deleteSkillConfirm:"Delete skill “{name}”? The bot won’t recognize it after that.",
skillSaved:"Saved",
exportSkill:"Export",
exportSkillHint:"Download as JSON to import on another bot",
importSkill:"Import skill",
importSkillHint:"Add a skill from a previously exported JSON file",
skillImportInvalid:"That isn’t a valid skill file. Choose a JSON export from LazyBoy.",
collapseSidebar:"Collapse sidebar",
botComputer:"{name}’s computer",
dedicatedScreen:"This screen",
enlarge:"Enlarge",
userControlling:"You’re in control",
aiReadOnly:"AI is working (view only)",
readOnly:"View only",
pasteClipboard:"Paste clipboard",
copyDesktopClipboard:"Copy desktop clipboard",
moreActions:"More",
unpin:"Unpin",
pin:"Pin",
markUnread:"Mark unread",
enterGroupName:"Enter a group name",
changeGroup:"Change group",
createOrMoveGroup:"Create / move to group",
removeFromGroup:"Remove from group",
unhide:"Unhide",
hide:"Hide",
delete:"Delete",
chooseConversation:"Choose a chat",
deleteConversation:"Delete chat",
clearConversation:"Clear this chat",
clearConversationTitle:"Clear this chat?",
clearConversationDescription:"Messages will be deleted. This agent’s long-term memory stays.",
cancel:"Cancel",
clearMessages:"Clear messages",
deleteConversationTitle:"Delete this chat?",
deleteConversationDescription:"It will leave the list. This agent’s long-term memory stays.",
avatarAppearance:"Avatar",
avatarAppearanceHint:"Color, shape, expression, and background. Eyes follow the cursor.",
color:"Color",
chooseColor:"Choose {value}",
customColor:"Custom color",
shape:"Shape",
expression:"Expression",
background:"Background",
bgNone:"None",
bgCircle:"Circle",
bgSquircle:"Squircle",
bgSquare:"Square",
exprIdle:"Idle",
exprHappy:"Happy",
exprSad:"Sad",
exprMad:"Mad",
exprSurprised:"Surprised",
exprWink:"Wink",
exprSleepy:"Sleepy",
exprSmug:"Smug",
exprUnsure:"Unsure",
exprScared:"Scared",
exprLove:"Love",
exprShy:"Shy",
exprSick:"Sick",
exprThinking:"Thinking",
name:"Name",
tags:"Tags",
tagsPlaceholder:"research, design, support (comma-separated)",
tagsLimit:"Up to 6 tags",
shortTitle:"Short title",
shortTitlePlaceholder:"For example: product research assistant",
description:"Description",
descriptionPlaceholder:"What this bot is for",
saving:"Saving…",
saveSettings:"Save settings",
deleteBot:"Delete bot",
memoryHelp:"Clearing a chat doesn’t delete these. Store clear preferences or facts — never passwords.",
enableLongTermMemory:"Long-term memory",
addMemory:"Add memory",
memoryPlaceholder:"Clear preferences or facts only. Passwords and tokens are rejected.",
memorySearch:"Search",
filterMemory:"Filter memory",
noMemory:"No long-term memory yet. Ask the agent to remember something from chat, or add it here.",
noMatchingMemory:"No matching memories.",
save:"Save",
edit:"Edit",
clearAllMemoryConfirm:"Clear all memory?",
clearMemoryConfirm:"Clear",
clearAll:"Clear all",
mcpHelp:"Press “Choose MCP” to connect from the catalog. If a key is required, fill it in first. Local stdio servers start inside the API container.",
mcpNamePlaceholder:"For example: github",
mcpConnectFailed:"Couldn’t connect. Check the key and try again.",
command:"Command",
commandPlaceholder:"npx, uvx, or a full path",
arguments:"Arguments",
environmentVariables:"Environment KEY=value",
headers:"Headers KEY=value",
connecting:"Connecting…",
connectMcp:"Connect MCP",
chooseMcp:"Choose MCP",
mcpPickerTitle:"Choose MCP",
mcpPickerLead:"Pick a featured or registry server. Every agent can use its tools.",
searchMcp:"Search MCP",
mcpRemote:"Remote",
mcpLocal:"Local",
mcpAdded:"Connected",
mcpNeedsKey:"Needs a key",
mcpNoResults:"No matching MCP. Try another search, or connect a custom server.",
mcpCustom:"Custom",
mcpBackToList:"Back to list",
mcpConnectNamed:"Connect {name}",
mcpKeyHint:"This MCP needs credentials.",
noMcp:"No MCP yet. Press “Choose MCP” above to connect one from the catalog.",
toolsCount:"{count} tools",
disabled:"Off",
disconnected:"Disconnected",
noTools:"No tools",
reconnect:"Reconnect",
disable:"Disable",
enable:"Enable",
preparingDesktop:"Preparing this agent’s desktop…",
computerPreviewHint:"Start the computer and the screen will show up here.",
bootingProgress:"Starting…",
restartComputer:"Restart",
shutDownComputer:"Shut down",
computerPower:"Computer menu",
sharedPowerHint:"This is a shared computer. The action affects every agent using it.",
stopAndTakeOver:"Stop and take over",
hudBooting:"Computer starting…",
hudWaking:"Waking…",
hudConnecting:"Connecting…",
hudHandoff:"Handing off…",
pasteToRemoteComputer:"Paste to remote computer",
pasteRemoteHelp:"Paste text here, then send it into VNC. This works over plain HTTP on the LAN.",
pasteTextPlaceholder:"Paste text here…",
pasteIntoVnc:"Paste into VNC",
botNamePlaceholder:"For example: research assistant",
sharedComputerHint:"Shares the environment with other bots",
deleteGroupDescription:"The group chat will be deleted. The bots and their own chats and memory stay.",
deleteDedicatedBotDescription:"The chat, private computer, and files on it will be permanently deleted.",
deleteSharedBotDescription:"The chat will be deleted. The shared computer and its files stay.",
phoneAccessDescription:"On the same LAN, open this URL in a phone browser and sign in with the same access token.",
localAddressWarning:"This is a loopback address — a phone can’t open it. Use this computer’s LAN IP, for example http://192.168.x.x:3101.",
close:"Close",
copied:"Copied",
copyUrl:"Copy URL",
workspaceName:"Workspace name",
showHiddenBots:"Show hidden bots",
collapseRightSidebar:"Collapse right sidebar",
workspaceSettingsHint:"Avatar, memory, and MCP live in the right-hand tabs. This only changes how this workspace is shown.",
modelSettings:"Models",
modelSettingsHint:"This provider and model apply to bots that don’t have their own.",
modelProvider:"Model provider",
providerXai:"xAI",
providerOpencodeGo:"OpenCode Go",
providerOpenaiCompatible:"OpenAI-compatible",
providerXaiHint:"Grok. Get a key from console.x.ai.",
providerOpencodeGoHint:"OpenCode Go subscription. Get a key from opencode.ai/auth.",
providerOpenaiCompatibleHint:"Self-hosted vLLM, Ollama, LiteLLM, or another OpenAI-compatible endpoint.",
apiKey:"API key",
apiKeyPlaceholder:"sk-…",
apiKeyStored:"A key is saved. Leave blank to keep it.",
usingEnvKey:"Using environment variable {name}.",
clearApiKey:"Clear saved key",
modelId:"Model",
modelIdPlaceholder:"For example: qwen2.5 or llama3.1",
reloadModels:"Reload models",
baseUrl:"Base URL",
baseUrlPlaceholder:"http://127.0.0.1:11434/v1",
baseUrlHint:"If the API runs in Docker, use host.docker.internal instead of localhost for services on this machine.",
workspaceModelHint:"Pick a provider, then the key and model. OpenAI-compatible needs your own endpoint.",
aboutDescription:"A local multi-agent workspace. Each bot has its own Linux computer. You can put them in a group chat and connect MCP tools.",
apiStatus:"API status: {status}",
statusNormal:"OK",
statusUnavailable:"Unreachable",
statusChecking:"Checking…",
helpBotsTitle:"Bots",
helpBots:"Use + at the top left to add a bot. Click the list to chat. Right-click to pin, hide, or delete.",
helpGroupsTitle:"Groups",
helpGroups:"+ → New group, pick at least two. One message, every agent in the group replies.",
helpComputerTitle:"Computer",
helpComputer:"The Computer tab on the right is this agent’s desktop. Start it, take over mouse and keyboard, or let it drive.",
helpMemoryTitle:"Memory",
helpMemory:"Clearing a chat doesn’t wipe long-term memory. Ask the agent to remember, or add it in Memory on the right.",
helpMcpTitle:"MCP plugins",
helpMcp:"Plugins in the lower left connect MCP servers. Their tools show up on screen and the agent can use them in chat.",
helpSkillsTitle:"Skills",
helpSkills:"+ → Teach a task, demonstrate once, and it becomes a skill. Export JSON after, or import someone else’s file onto another bot.",
helpAttachTitle:"Attachments",
helpAttach:"+ → Attach a file. Images go to the model on that message and aren’t stored in chat history. If the computer needs the original, it sits in inbox/ for two hours, then is deleted.",
helpShortcutsTitle:"Shortcuts",
helpShortcuts:"Enter sends, Shift+Enter makes a new line. While it’s replying, the send button becomes Stop. On a call, Space interrupts and Esc hangs up.",
helpVoiceTitle:"Voice calls",
helpVoice:"The phone in a 1:1 header calls the bot. Speak a task and it uses its computer. It answers immediately whether it can, and you can interrupt to change course.",
call:"Call",
hangUp:"Hang up",
interrupt:"Interrupt",
listening:"Listening…",
speaking:"Speaking…",
callConnecting:"Connecting…",
workingOnComputer:"Working on the computer…",
callPrompt:"Just say what you need. A short pause sends it.",
callShortcuts:"Space interrupts · Esc hangs up",
callFailed:"The call dropped.",
micDenied:"Microphone permission is required for calls.",
micFailed:"Couldn’t open the microphone.",
callAudioFailed:"Call audio stopped working. Hang up and call again.",
takeOverToContinue:"You need to take over the screen.",
setUpVoiceToCall:"Set up voice before calling",
voiceEnabled:"Enable voice calls",
voiceEnabledHint:"Off by default. Turn on and save to use the call button.",
voiceDisabledHint:"Voice calls are off. Turn them on in Settings → Voice.",
voiceSettings:"Voice",
voiceSettingsHint:"Voice is separate from the text model. If you already have an xAI chat key, you usually don’t need another. Billed per minute.",
voiceProvider:"Voice provider",
voiceModel:"Voice model",
voiceName:"Voice",
providerOpenai:"OpenAI",
providerXaiVoiceHint:"Grok Voice. Live calls with barge-in; computer work is handed to the text model.",
providerOpenaiVoiceHint:"OpenAI Realtime. Same call UI; you can switch later.",
voiceReusesTextKey:"Reusing the xAI key saved for the text model.",
feedbackDescription:"Write a problem, idea, or request. This is a local workspace, so the text is copied to the clipboard for you to paste into an issue or message.",
feedbackPlaceholder:"For example: in group chats I want to pick who speaks first…",
copyContent:"Copy",
loginTitle:"Sign in to LazyBoy",
loginDescription:"Enter the shared access token configured on the server.",
accountsHelp:"Stored in this bot’s vault. Passwords are entered only here — never in chat, never shown to the model. Schedules fill the form at a login wall.",
accountSite:"Site",
accountSitePlaceholder:"For example: Gmail",
accountHost:"URL or domain",
accountHostPlaceholder:"mail.google.com",
accountUsername:"Username",
accountPassword:"Password",
accountPasswordKeep:"Leave blank to keep the current password",
accountNotes:"Notes",
accountNotesPlaceholder:"Optional, for example: work inbox",
addAccount:"Add account",
noAccounts:"No saved accounts yet. Add one here if a schedule should sign in by itself.",
loginNeedsYou:"Needs you to sign in on the keyboard",
loginOpenScreen:"Open its screen",
loginWhy:"After sign-in: {why}",
scheduleChip:"Scheduled",
scheduleRunChip:"Schedule run",
schedules:"Schedules",
schedule:"Schedule",
schedCreate:"New schedule",
schedEmpty:"No schedules yet. Say “every day at 9…” in chat, or press +.",