Docs

Install it, connect a provider, and start a chat. This is the whole manual.

Requirements

  • To use the Mac app: a Mac with Apple silicon.
  • To build it: Node.js 22, Yarn 1.x (classic; pnpm is not supported because Theia needs a flat node_modules), git, and a C/C++ toolchain for native modules (Xcode command line tools on macOS).
  • Only macOS has been tested. Linux and Windows are untested.

Install the Mac app

Download the latest .dmg from the releases page (currently 0.5.2), open it, and drag MyLo onto Applications.

The app is not signed or notarized, because that needs an Apple Developer account. macOS will refuse a downloaded copy the first time: right-click the app and choose Open, or run xattr -dr com.apple.quarantine /Applications/MyLo.app. An app you built on your own Mac opens normally.

Build from source

This runs MyLo in a browser tab, which is also the quickest way to try changes.

terminal
git clone <repository-url>
cd mylo
yarn
yarn build:browser
yarn start:browser

Open http://127.0.0.1:3100. The server only listens on 127.0.0.1, so other machines cannot reach it. Use that address rather than localhost: on some systems localhost resolves to IPv6 and can hit a different local server.

The first yarn build:browser takes a few minutes. It also downloads the VS Code git extension from Open VSX, so it needs a network connection.

The port is set in browser-app/package.json (theia start --port 3100). Change it there if 3100 is taken.

Build the Mac app

From the repository root, after yarn:

terminal
yarn build:electron
yarn package:mac
open electron-app/dist/MyLo-*-arm64.dmg

The disk image is about 200 MB and has a styled installer window. yarn start:electron runs the desktop app without packaging it.

The desktop app and the browser version share the same settings, provider keys and code index in ~/.theia. They rebuild native modules differently, so after building the Mac app run yarn build:browser again before starting the browser version.

Open a folder

Use File → Open Folder.... A folder you have not opened before starts in Restricted Mode, which is Theia's workspace trust. Trust it from the status bar if you want extensions and tasks to run.

Light and dark

MyLo has two themes, MyLo Light and MyLo Dark, and follows your system appearance by default. When macOS switches between light and dark, the editor switches with it, without a restart.

  • Pick a theme from the theme picker and it becomes your preferred theme for the current appearance (the same way VS Code behaves).
  • From the command palette: Appearance: Match System, Appearance: Always Light or Appearance: Always Dark.
  • Settings: window.autoDetectColorScheme (default on), workbench.preferredLightColorTheme and workbench.preferredDarkColorTheme.

Connect a provider

Open AI → Manage Providers.... You will see OpenAI, Anthropic, Qwen, DeepSeek, Kimi, GLM, MiMo, OpenRouter and Hugging Face and Ollama, plus Add custom provider. The same screen opens from File → Preferences, the gear menu, the plug button in the title bar, the welcome page and Settings → AI Features (Theia moved its own AI settings out of the Settings editor, so providers are not listed there as individual settings).

  1. Pick a provider and paste your API key. Use Get an API key to open its console.
  2. For most providers, check the base URL (Qwen, Kimi, GLM and MiMo have region options; keys only work in the region they were issued in).
  3. Add the model ids you want, or press Fetch from API to list them. GLM has no list endpoint, so add its ids by hand.
  4. Press Test connection, then Save. A green dot means it is connected.

OpenAI and Anthropic use Theia's built-in model lists. Everything else becomes an OpenAI-compatible model with an id like deepseek/deepseek-v4-flash.

OpenRouter and Hugging Face publish their model lists without a key, so Test connection checks the key separately. Their lists are long: use Fetch from API and click the models you want. Hugging Face's router serves chat models only.

Ollama (local models)

Start Ollama, pick Ollama (local) and leave the key empty. The base URL is http://localhost:11434/v1. Press Fetch from API to list the models you have pulled, click the ones you want, then Save. The embedding model nomic-embed-text works for semantic code search. This has been checked against a stand-in server that speaks Ollama's API, not a real Ollama install, so report anything unexpected.

Any other service

Use Add custom provider for anything that speaks the OpenAI format, for example Together, Groq, vLLM or LM Studio. The form wants an API key even if the server ignores it; type anything.

Keys are saved in plain text in ~/.theia/settings.json, the same as Theia's own AI keys. Do not share that file.

Example model names in the presets come from public documentation and change often. If one is rejected, check the provider's console and type the id yourself.

Chat and agents

The chat panel is on the right, and it has no icon strip of its own. Everything is on the top bar: the right-most button shows or hides the panel, and Switch Chat... lists your open chats.

One chat per agent

Press + in the top bar (or AI → New Agent Chat...). Pick a model or Agent default. That chat stays pinned to Mylo; open as many as you like. AI → Change Chat Model... changes the model of the chat you are in.

  • Mylo is the one agent. Pick how it works with the selector in the chat box:
    • Ask: answers questions about your code. Read-only.
    • Plan: reads your code and gives you a step-by-step plan to approve. Read-only.
    • Agent: creates and edits files, runs tasks, uses git and runs shell commands.
  • Behaviours for one job are slash commands: /review, /architect and /debug, followed by what to look at.

Editing files and running commands

Mylo can read, create and change files, run workspace tasks and use git. It also has a shell tool. These tools come from Theia's AI IDE package; Theia's other agents (GitHub, browser testing, skill authoring and more) are still there, but you only reach them by typing @Name.

  • In Agent mode Mylo writes changes directly to your files, with no diff to review, so use git to review and undo. Use Ask or Plan when you want nothing changed.
  • Out of the box every file write and every shell command asks first: you see what it wants to do and press Allow or Deny. You can relax that per tool, or for all tools, with ai-features.chat.defaultToolConfirmation.
  • The Default model at the top of AI Configuration → AI Providers is the model Mylo uses. It is picked for you the first time a provider connects. Under it you can set a Fallback model: after a few quick retries a rate-limited or failing request switches to it.

Queued messages, plans and resuming

  • Type while Mylo is working and your message waits in a list above the chat box, then goes out when it is done. Per message: the arrow steers (stops the agent and sends it now), the pencil edits it, the cross removes it; right-click for Move Up, Move Down and Remove All too. A stop or an error pauses the queue; Resume continues.
  • Plan mode saves the plan as a checklist in .plans/<title>.plan.md, where you can edit it. A saved plan appears in the chat as a card with Build and View buttons, and every .plan.md editor has a Build button on its tab bar. In Agent mode Mylo ticks each step as it finishes, and the bottom bar shows the progress.
  • After a stop, an error or a restart, type /resume (or click the plan in the bottom bar) in any chat to carry on from the first open step.
  • You can run several chats at once. The status bar says how many agents are running and how many are waiting for you ("2 agents running · 1 needs you"); click it to open one of them or stop it. They share one model and its rate limit, and nothing locks files, so give parallel chats different parts of the project.
  • A run that goes in circles or gets very long is stopped with a note: the same tool call with the same result four times, 60 model calls, or a token limit (see Limits and controls below). The note has a Continue button where continuing makes sense.

Referencing files and folders

  • #file:path points the agent at a file; it reads what it needs with its tools.
  • #folder:path, or dragging a folder from the Explorer into the chat, attaches the folder's layout: names and sizes, three levels deep, at most 250 lines, without dependencies, build output, binaries or anything that looks like a secret. File contents are not copied into the prompt.

Token usage and context

Press the chart button in the top bar (or AI → Chat Usage, or the chart icon in the chat panel header) to see, for the chat you are in:

  • Context window: how full it is, as reported by the provider. If the model does not state its limit, 200k is assumed and the panel says so.
  • Tokens used: input, output and cache tokens, and the total billed across the chat.
  • What is in the context: your messages, replies, attached files and everything else (instructions, tools, tool results). These parts are estimates at about four characters per token.

Compact a chat

When a chat gets long, press Compact chat in the Chat Usage panel, the fold icon in the chat header, or use AI → Compact Chat. The model writes a summary of the conversation and the chat carries on in a fresh session that starts from it, so the context window empties out. The full conversation stays in Chat History. It uses the Chat Session Summary agent, so a model must be connected for it (set in AI Configuration).

Chats also compact themselves: when a reply leaves the chat past 75% of the model's context window, or one long run fills it, the chat is compacted and carries on (a notice says so). Turn it off or change the share in AI Configuration → Limits & controls.

The ring next to the send button shows how full the context is, filling clockwise from green through yellow to red. Providers that do not report token counts show nothing until they do.

The agents are only system prompts, defined in mylo-agents/src/browser/mylo-agent.ts. Adding one is a few lines.

The model an agent uses by default is set in AI Configuration (linked from the welcome page).

Codebase search

When you open a folder, MyLo indexes it in the background. The status bar (bottom right) shows progress and the file count; click it for options.

  • AI → Search Codebase... searches names and words and opens the file at the match.
  • Chats can use the same index to find and read your files, so ask about your code and they will look first. The tool rows in the chat show which file and lines each read covered.
  • AI Configuration → Codebase Index shows the state of the index, lets you try a search the way an agent would, and lists what is left out. Saved indexes says how many folders have an index and how much space they take; Clear all indexes deletes them. Indexes live in the app's data folder, never in your project, and ones for folders that are gone, or not opened for 30 days, are removed automatically.
  • The keyword index is built locally and never leaves your machine. It respects .gitignore and skips binaries, build output, .env files, private keys and other secrets.

Semantic search (optional, off by default)

In AI Configuration → Codebase Index you can pick a connected provider and an embedding model to add meaning-based search on top. This sends chunks of your code to that provider. It is new and has only been tested against a local stand-in, not a real provider.

Several repositories

Add folders with File → Add Folder to Workspace (or a .theia-workspace file). Each folder is a repository of its own, and every one is indexed.

  • Each chat is pinned to one repository: the first until you choose another. The name shows at the bottom left; click it, or use AI → Set Repository for This Chat.... The choice is remembered per chat.
  • Search, file reads, the plan the chat builds, the project's servers (.mylo/environments.json) and where commands start all follow the chat's repository, so two chats in two repositories do not touch each other's folder.
  • To look at another repository, the chat passes its name: codebase_search and codebase_read take a repo, and all searches every repository. Results show repo/path.
  • With a single folder nothing changes and nothing extra is sent to the model.

Inspector, usage and limits

  • AI → Agent Inspector lists each run: what was sent to the model, the answers, every tool call, and how long each took. Its Tools tab shows how often each tool was called and what its definition costs in tokens on every request. Runs are saved to ~/.theia/mylo-inspector.jsonl (readable only by you; text that looks like a key or password is masked, and long text is cut), so they survive a restart. mylo.inspector.persist turns saving off and AI → Clear Inspector Runs empties it.
  • AI Configuration → Token Usage keeps history from ~/.theia/mylo-token-usage.jsonl and shows an estimated cost per model, provider or day. OpenRouter publishes prices; for other providers add yours in mylo.ai.modelPrices. Models without a price are counted as unknown, not free.
  • AI Configuration → Limits & controls gathers the run and context settings in one page, each with its default and what it does: model calls and tokens per run, when a chat compacts itself, the longest answer, the longest tool result, how many old tool results stay whole, and prompt caching.

Web search

Chats have two tools, web_search and web_fetch (setting mylo.web.enabled, on by default). A search goes to Brave (mylo.web.braveApiKey), Tavily (mylo.web.tavilyApiKey), your own SearXNG (mylo.web.searxngUrl) or, with nothing set, DuckDuckGo, which needs no key but is the least reliable and can ask for a human check. Pages come back as Markdown without navigation and ads.

  • Searches run without asking. A page address that came from a search result, or from a link on a fetched page, runs without asking too; any other address asks first.
  • Only http and https; never localhost, private or cloud-metadata addresses unless mylo.web.allowPrivateNetwork is on. No JavaScript is run, so pages built in the browser come back with an explanation instead of text.

Previews

  • Markdown: open a .md file and press Open Preview to the Side in the editor toolbar. $…$ and $…$ show as typeset math, and a mermaid code block draws the diagram.
  • Images (png, jpg, gif, webp, bmp, ico, avif), audio (mp3, wav, ogg) and video (mp4, webm) open in a viewer. SVG files open as text.
  • These are VS Code's own built-in extensions, plus the Mermaid extension by Matt Bierner (checked before it was bundled), so they work offline.

Servers and Docker

Describe the servers and Docker engines of a project in .mylo/environments.json (AI → Manage Environments..., or AI → Add Ops Environment... to pick a host from your SSH config). The agent can then read logs and run commands there.

  • Commands run through your own ssh, so your config, keys and agent apply. MyLo stores no passwords, never accepts a host key by itself, and never waits at a prompt.
  • Each environment has a trust level: observe (reads only), approve-writes (anything that changes something asks) or approve-each (everything asks, and a remote host's name must be typed). Commands are classified as read, change, unknown or dangerous; dangerous ones are refused. The approval dialog names the environment (and the repository, with several).
  • Test connection on the Environments page explains a failure in plain words: host key, login, name, refused or timed out.
  • ops_hotfix changes one place in a file on a host: you see the exact diff, MyLo backs the file up, verifies the result and restores it if the check fails. /incident <symptom> runs a read-only investigation and writes its findings to .incidents/.
  • Every ops command is recorded in ~/.theia/mylo-ops-audit.jsonl with secrets masked.

This has been tested against a stand-in ssh and Docker, not many real servers. Start with observe on anything that matters.

Layout buttons

Along the top: the button on the far left hides or shows the left side bar together with the Explorer, Search and Git icon strip, so the editor gets the whole width. On the right: AI providers, agent history, chat usage, switch chat, new agent chat, terminal, and the chat panel. Outline lives under the Explorer.

Troubleshooting

  • Blank window for a while at first launch: the app is large. Give it 10 to 20 seconds; the launch screen shows while it loads.
  • Build errors about native modules: install the C/C++ toolchain and use Node 22.
  • Another site shows up on port 3100: use 127.0.0.1, or change the port.
  • After editing an extension in mylo-ui or mylo-agents: run yarn (it compiles them) before building.
  • Provider test says authentication failed: the key and the base URL's region must match.

Updating

For the Mac app, download the new .dmg and replace the app in Applications. From source:

terminal
git pull
yarn
yarn build:browser
yarn start:browser

Where things are stored

  • ~/.theia/settings.json: your settings, including provider keys and models.
  • ~/.theia/mylo-index/: the saved code index for each folder you opened (never written into a project).
  • ~/.theia/mylo-inspector.jsonl, mylo-token-usage.jsonl and mylo-ops-audit.jsonl: saved Inspector runs, token usage, and ops commands.
  • In a project: .plans/ (saved plans), .mylo/environments.json (servers) and .incidents/ (investigation notes).
  • The window layout is remembered by the app (or by the browser, for the browser version).