dyno lab DOCUMENTATIONGitHub ↗

Dyno's assistant

The assistant is the panel on the right of every tab. Tell it what you want to find out, typed or spoken, and it turns that into tests and evals in Dyno. It plans the work, looks at what Dyno already has, fills in the screens for you to check, and asks before it runs or saves anything.

The assistant set up a test in Agents → Setup and is waiting for approval to run it on two models

From a real test, start to finish.

It runs only on your Mac. - It talks to a model you started in Models, at 127.0.0.1. There is no cloud model and no fallback to one. - Voice uses macOS on-device speech recognition. If your Mac can't recognise your language on device, the mic says so and you type instead. - Conversations are saved by the lab service under ~/.mlx-dyno/lab/assistant/, one folder per conversation.

Using it

Web search (optional)

Tick Web search under the model menu to let the assistant search the web and read pages in that conversation. It's off by default, for each conversation.

How it works: - Dyno runs SearXNG, an open-source search engine, in Docker on your Mac. It listens only on 127.0.0.1. The first time you tick the box, Docker downloads it (about 100 MB). - The assistant gets two more tools: one searches the web and returns titles, links and short excerpts; the other reads the text of a public page. - Each search and each page read shows in the chat, for example Searched the web: … and Read arxiv.org.

A paid search API instead. In Settings → Web search, choose Brave, Tavily, Exa or Serper and paste your key. Dyno keeps the key in your macOS Keychain, not in a file, and needs no Docker for these. Test runs one search. The same choice answers web searches from Claude Code and Codex running on your models.

What leaves your Mac: - Your search queries. SearXNG sends them to Google, Bing and other search engines from your internet address; a paid API receives them directly. - Requests for the pages it reads, sent to those websites the same way.

The model, your conversations, tests and files stay on your Mac.

The risks, and what Dyno does about them: - Prompt injection. Web pages are written by other people and can contain instructions meant to mislead the assistant. Its instructions say to treat pages only as information, and it still can't run or save anything without your Approve. - Your own Mac and network. Only public web addresses can be read; local and private addresses are refused, including after a redirect. So a page can't steer the assistant into Dyno's own services or your local network. - Search engines see your queries. If that matters for a conversation, leave the box unticked.

SearXNG stops when Dyno quits.

Documents

Click the paperclip next to the mic, or drop files anywhere on the panel.

The context window

A model can only read so much at once. A long conversation is kept small for the model without losing anything on disk:

API

The lab service at http://127.0.0.1:8980/lab/v1:

Method Path What
GET /assistant/conversations Conversations, newest first
POST /assistant/conversations A new conversation {}
GET /assistant/conversations/{id}?after=&before=&limit= Events, the reply being written (live), the task list, a waiting pending proposal and context use
POST /assistant/conversations/{id}/messages Send {"text", "context", "model": {"port", "model"}} (202). context is what the person sees
POST /assistant/conversations/{id}/decide Answer a proposal {"proposal", "approve", "note"} (202)
POST /assistant/conversations/{id}/stop · /rename · /settings · /delete Stop a turn; {"title"}; {"budget", "thinking", "web"} (budget: 8,192 to 1,048,576 tokens); delete
POST /assistant/conversations/{id}/documents Attach a document's text {"name", "kind", "pages": ["page text", ...], "note"} (201, up to 40 MB)
GET /assistant/model-context?model= The most tokens a downloaded model reads (context), or null