{"slug": "show-hn-a-local-first-ai-agent-for-the-desktop-no-electron-any-llm-endpoint", "title": "Show HN: A local-first AI agent for the desktop, no Electron, any LLM endpoint", "summary": "A developer publishing under the name Scronkfinkle released byob version 0.3.4, a local-first desktop AI agent that connects to any OpenAI-compatible endpoint — including llama-server, Ollama, LM Studio, vLLM or a hosted API — and works inside a folder, reading and writing files, running code, and building spreadsheets, charts, documents and small apps alongside the chat. byob ships as a native GPU-drawn application for Linux, macOS and Windows with no Electron, distributed as a roughly 60 MB download (13 MB for the slim build) and installable via `cargo install byob`, with release archives on GitHub. The agent includes file tools, `run_command` and `run_python` (sandboxed on Linux) with approval cards and per-turn undo, reads PDF, Word and PowerPoint files, keeps notes in plain Markdown, and exposes its prompt, core tools, artifacts and subagents as plugins on a public API.", "body_md": "Note\n\nHeads up: this project, README included, is influenced heavily by AI agents. If LLM-flavoured prose isn't your thing, fair warning. Human-written docs will come once things settle.\n\n**A native desktop AI coworker for the model you already run.** Point byob at any\nOpenAI-compatible endpoint (llama-server, Ollama, LM Studio, vLLM or a hosted API) and it works\nin a folder with you: reads and writes files, runs code, and builds spreadsheets, charts,\ndocuments and small apps beside the chat.\n\nbyob is **desktop software, not a web page in a window**: one program for Linux, macOS and Windows\nthat draws its own interface on the GPU, with no Electron.\n\n<sub>Recorded live against a local model (llama.cpp); the waits for the model are cut.</sub>\n\n- **A real desktop app.** One folder, about a 60 MB download with everything in it (13 MB for\nthe slim build), and native file dialogs, drag and drop and keyboard shortcuts. The browser UI is the reverse of the usual arrangement: the same native interface\ncompiled to WebAssembly, so a tab or your phone gets the identical app, live on the same session.\n- **Your model, your machine.** No bundled inference and no account: any OpenAI-compatible URL.\nFirst run finds local servers on their usual ports; tool calling falls back to prompt-based\ncalls when the server has none.\n- **Artifacts beside the chat.** Spreadsheets (xlsx/csv), charts, Markdown documents,\nimages and HTML apps, each with its version history.\n- **Hands, with a leash.** File tools,`run_command` and`run_python` (sandboxed on Linux); approval\ncards with diffs; undo per turn.\n- **Reads, searches and remembers.** PDF, Word and PowerPoint files; images, for models that can see;\nweb search and page reading (Exa by default, or your own SearXNG, Brave or Tavily); notes kept\nacross chats in plain Markdown; a step plan for long tasks.\n- **Workspaces.** A folder with its own settings and where commands run: this machine, a Nix dev\nshell or a Docker/Podman container. Settings layer global → workspace → chat.\n- **Everywhere you are.**`byob --serve` opens that session to browsers too; with`tailscale serve` it's on your phone.\n- **Everything is a plugin.** The prompt, the core tools, artifacts, spreadsheets, subagents and\ncompaction are bundled plugins on the same API anyone gets. Plugins add tools, draw UI (panes,\nheader chips, settings, cards), hook every stage of a turn, and run long-lived backends. byob\ncan write and fix its own plugins from a chat.\n\n| <sub>“Make me a plugin with a counter pane”: byob writes it, reads its own load errors, fixes them, and the pane appears.</sub> | <sub>HTML apps run inline, on the desktop (a separate Servo renderer process ships with byob) and in the browser UI.</sub> | \n| <sub>Open a CSV as a spreadsheet; every write recalculates and reports errors back to the model.</sub> | <sub>First run: pick a server it found, or a preset.</sub> | \n\n<sub>The browser UI at phone width.</sub>\n\n```\ncargo install byob                          # with the browser UI built in\ncargo install byob --no-default-features    # slim: desktop only, a few MB smaller\nnix build github:Scronkfinkle/byob          # or .#byob-slim\n```\n\nRelease archives for Linux, macOS and Windows are on the\n[releases page](https://github.com/Scronkfinkle/byob/releases): `byob-…` has everything (the\nbrowser UI and `byob-artifact-host`, which draws HTML apps inline; keep it next to `byob`), and\n`byob-slim-…` is byob alone. `cargo install` doesn't build the renderer; without it, HTML apps\nopen in your browser with one click. On Linux byob needs no GUI toolkit (file dialogs go through\nthe XDG desktop portal or zenity; without either, drop files onto the window), and the renderer\ndraws with the system's OpenGL (Mesa).\n\nOn macOS the builds aren't signed by an Apple developer yet. Fetched from a terminal, a release\narchive never meets Gatekeeper (use `x86_64` instead of `aarch64` on an Intel Mac):\n\n```\nv=0.3.4; curl -L https://github.com/Scronkfinkle/byob/releases/download/v$v/byob-$v-aarch64-apple-darwin.tar.gz | tar xz\n./byob-$v-aarch64-apple-darwin/byob\n```\n\nOr take `byob-…-apple-darwin.dmg` and drag `byob.app` into Applications. Downloaded with a\nbrowser, macOS refuses to open it at first: try once, then System Settings → Privacy & Security →\nOpen Anyway (on macOS 14 and older, right-click → Open), or run\n`xattr -dr com.apple.quarantine /Applications/byob.app`. Opened from Finder, byob starts in your\nhome folder and finds your shell's tools (Homebrew, Nix).\n\n```\nbyob                                        # desktop window\nbyob --serve                                # + browser UI on http://127.0.0.1:7470\nbyob --headless                             # browser UI only, no window\nbyob --inference-url http://host:8080/v1 --model local\nBYOB_API_KEY=sk-... byob                    # for hosted endpoints\nbyob --workspace ~/projects/taxes           # start in the workspace for that folder\n\ntailscale serve 7470                        # reach it from any device on your tailnet\nbyob --headless --allow-user you@example.com # only admit that Tailscale login\n```\n\nOn first run byob shows **Connect a model**: servers it found on this computer's usual ports\n(llama-server 8080, Ollama 11434, LM Studio 1234, vLLM 8000), presets for those and for hosted\nAPIs, and a Test connection button. Later, the connection lives at the top of Settings (or click\nthe status dot in the header).\n\nChats are grouped by **workspace**. **+ Workspace** makes one (a fresh folder or an existing\none) and picks where commands run. A workspace's `…` menu and the sliders next to a chat's title\nshow what's inherited and what's set there: model, approvals, tool calling, compaction,\nsubagents, extra instructions.\n\nSettings → Plugins lists what the chat in view can use. Any bundled plugin can be forked to your\nown plugins and edited (**Fork to edit**), or just ask byob to change or write one: it has\nauthoring tools, and a broken plugin's errors come back to the model so it can fix it.\n\n- [docs/views.md](https://github.com/Scronkfinkle/byob/blob/main/docs/views.md) : view trees, the UI plugins draw (panes, chips, cards, grids).\n- [docs/plugins-backend.md](https://github.com/Scronkfinkle/byob/blob/main/docs/plugins-backend.md) : long-lived backends (Python or Rust) and hooks.\n- [docs/environments.md](https://github.com/Scronkfinkle/byob/blob/main/docs/environments.md) : where commands run, and adding your own.\n- [demos/](https://github.com/Scronkfinkle/byob/blob/main/demos/README.md) : hands-on tours, each in a throwaway profile (`demos/run.sh todo` ).\n- [examples/plugins/todo-demo](https://github.com/Scronkfinkle/byob/blob/main/examples/plugins/todo-demo) : a small plugin with a backend, a pane and cards to copy from.\n\n```\nnix develop          # or: direnv allow\ncargo run -p byob    # launch the app\ncargo xtask web      # build the browser UI; the next `cargo build` embeds it\ncargo xtask ci       # full gate: fmt, clippy, tests, layers, no-tokio, wasm\nnix build            # release package (byob + bundled web UI + the artifact host)\n\n# HTML artifacts inline on the desktop: the Servo helper is its own workspace (AGENTS.md §3)\n(cd host/artifact-host && cargo build --release)   # scripts/headless.sh picks it up\n\n# desktop GUI on a virtual display, scripted, with a screenshot (HEADLESS_RECORD=x.mp4 records it)\nscripts/headless.sh --inference-url http://localhost:8080/v1 --model local --send \"hi\" --screenshot /tmp/byob.png\nscripts/readme-media.sh                            # regenerate this README's pictures\n\n# live test against a real server\nBYOB_LIVE_URL=http://localhost:8080/v1 cargo test -p byob-llm -- --ignored\n```\n\nSee [AGENTS.md](https://github.com/Scronkfinkle/byob/blob/main/AGENTS.md) for the rules, [docs/architecture.md](https://github.com/Scronkfinkle/byob/blob/main/docs/architecture.md) for the\ndesign and [ROADMAP.md](https://github.com/Scronkfinkle/byob/blob/main/ROADMAP.md) for what's next. byob began as a rewrite of hob, an\nearlier desktop coworker that bundled llama.cpp; byob drops the bundled inference.\n\nLicensed under MIT OR Apache-2.0.", "url": "https://wpnews.pro/news/show-hn-a-local-first-ai-agent-for-the-desktop-no-electron-any-llm-endpoint", "canonical_source": "https://github.com/Scronkfinkle/byob", "published_at": "2026-11-15 14:52:06+00:00", "updated_at": "2026-11-15 15:23:55.885249+00:00", "lang": "en", "topics": ["ai-agents", "ai-tools", "ai-products", "developer-tools", "large-language-models"], "entities": ["byob", "Scronkfinkle", "llama.cpp", "Ollama", "LM Studio", "vLLM", "Exa", "GitHub"], "also_reported_by": [], "alternates": {"html": "https://wpnews.pro/news/show-hn-a-local-first-ai-agent-for-the-desktop-no-electron-any-llm-endpoint", "markdown": "https://wpnews.pro/news/show-hn-a-local-first-ai-agent-for-the-desktop-no-electron-any-llm-endpoint.md", "text": "https://wpnews.pro/news/show-hn-a-local-first-ai-agent-for-the-desktop-no-electron-any-llm-endpoint.txt", "jsonld": "https://wpnews.pro/news/show-hn-a-local-first-ai-agent-for-the-desktop-no-electron-any-llm-endpoint.jsonld"}}