Repository navigation
Releases: UnixUserDev/byoa
Release list
byoa v0.2.1 — workspace safety
byoa v0.2.1 — workspace safety
Install (use a release artifact, not the source tree)
Standalone (needs Node >= 26; no npm install):
mkdir -p ~/.local/lib/byoa ~/.local/bin
tar -xzf byoa-0.2.1-linux-x64.tar.gz -C ~/.local/lib/byoa
ln -sf ~/.local/lib/byoa/byoa ~/.local/bin/byoa
byoa --versionKeep the extracted directory together: the launcher resolves @opentui/core from the
node_modules beside it.
npm-installable tarball:
npm install -g ./byoa-0.2.1-npm.tgz
byoa --versionSafety: $HOME is not a workspace
The workspace is the sandbox's single read-write mount. Launching from your home directory used
to hand the model your entire home. $HOME, /home and / are now refused:
refusing to use /home/unixuser as the workspace: it is your home directory.
cd into a project, pass --cwd <dir>, or --allow-home to override.
Point it at a project:
cd ~/Projects/something
byoa --tui --provider lmstudio --model google/gemma-4-e4b--allow-home exists for the rare deliberate case, not as the default.
Inside the namespace the workspace is the only real path — $HOME is not mounted, so a task that
cd ..s out of the workspace finds an empty skeleton root, not your files.
Also fixed in 0.2.1
- Piped or empty stdin no longer leaves an unsettled top-level await (exit 13 with a Node warning).
-p ""is a usage error instead of silently dropping into the REPL.- A database path that cannot be opened prints one line instead of a stack trace.
Included since 0.2.0
TUI (--tui), core loop, OpenAI-compatible + Anthropic providers (plus local servers), sessions
with resume, shell/file tools, bubblewrap sandbox with a read-allowlist skeleton root, three
prompt tiers, and namespaced Obsidian-backed memory.
Requirements
- Node.js >= 26
- Linux with
bubblewrap;strict(default) refuses to run unwrapped without it.
Quality
216 tests, 0 skipped, including real-bubblewrap isolation tests and headless OpenTUI render tests;
tsc --noEmit clean.
AI-generated with OpenCode — primary model: DeepSeek V4.1 Flash.
byoa v0.2.0 — the terminal UI
byoa v0.2.0 — the terminal UI
The harness now has a face.
Install (use a release artifact, not the source tree)
Standalone (needs Node >= 26; no npm install):
mkdir -p ~/.local/lib/byoa ~/.local/bin
tar -xzf byoa-0.2.0-linux-x64.tar.gz -C ~/.local/lib/byoa
ln -sf ~/.local/lib/byoa/byoa ~/.local/bin/byoa
byoa --versionKeep the extracted directory together: the launcher resolves @opentui/core from the
node_modules beside it, so copying byoa out on its own makes --tui fall back to the CLI.
npm-installable tarball:
npm install -g ./byoa-0.2.0-npm.tgz
byoa --versionNew: --tui
byoa --tui
byoa --tui --provider lmstudio --model google/gemma-4-e4bA calm single-column terminal UI: header, transcript, input, and one stats line (tokens in/out,
tok/s, elapsed, tool calls, memory hits, model/tier/sandbox). Opt-in, and only on a real colour
terminal — it falls back to the plain CLI when stdout is not a TTY, TERM=dumb, or NO_COLOR is
set.
- Incremental streaming (appends, never full repaints).
- Tool calls update in place; failures are marked and counted.
- Approval bar:
aallow,d/Escdeny,Enterdenies by default. Ctrl+Treasoning,Ctrl+Otools,PgUp/PgDnscroll,Ctrl+Ccancel.- Terminal restored on every exit path, including signals.
The TUI is another dumb terminal on the existing AgentEvent / AgentCommand wire. run.ts is
the only module that loads OpenTUI at runtime.
Also in this release
- Release artifacts are now built bundles (standalone + npm tarball). Node does not type-strip
TypeScript insidenode_modules, so the source tree is not an installable package.
Added in 0.1.0
Core loop, OpenAI-compatible + Anthropic providers (plus local servers), sessions with resume,
shell/file tools, bubblewrap sandbox with a read-allowlist skeleton root, three prompt tiers, and
namespaced Obsidian-backed memory.
Requirements
- Node.js >= 26
- Linux with
bubblewrapfor sandboxing;strict(default) refuses to run unwrapped without it.
Quality
211 tests, 0 skipped, including real-bubblewrap isolation tests and headless OpenTUI render tests;
tsc --noEmit clean.
AI-generated with OpenCode — primary model: DeepSeek V4.1 Flash.
byoa v0.1.0 — Bring Your Own Agent
byoa v0.1.0 — Bring Your Own Agent
First public release. A local-first coding agent harness: point it at any model, pick a prompt
tier sized to that model, and let it run shell + file tools inside a bubblewrap sandbox whose
policy you control.
Install (use a release artifact, not the source tree)
Standalone (needs Node >= 26; no npm install):
tar -xzf byoa-0.1.0-linux-x64.tar.gz
install -m755 byoa ~/.local/bin/byoa
byoa --versionnpm-installable tarball:
npm install -g ./byoa-0.1.0-npm.tgz
byoa --versionBoth contain the bundled JavaScript build. The TypeScript source is not a runnable artifact:
Node does not type-strip files inside node_modules, so releasing the source tree would not
install.
Included
- Streaming agent loop with tool calls, cancellation and approvals.
- Providers: OpenAI-compatible (including LM Studio, Ollama, llama.cpp, vLLM) and Anthropic.
- Session persistence with resume and usage counters.
- Tools:
shell,fs_read,fs_write,fs_edit,fs_patch. - Sandbox: policy → bubblewrap argv, read-allowlist skeleton root (no
--ro-bind / /), network
denied by default, cleared environment,ulimitlimits, fail-closedstrictmode. - Three prompt tiers (
lite/normal/large) owning persona, context budget, per-result
truncation and output cap. - Obsidian-backed memory: markdown notes, SQLite FTS5 index,
memory_recall/memory_remember,
namespaced tomemory/byoa/so the harness only reads what it wrote.
Not included yet
TUI, Web and Electron adapters, MCP, subagents, web fetch/search.
Requirements
- Node.js >= 26
- Linux with
bubblewrapfor sandboxing. Without it,strict(the default) refuses to run
rather than silently degrading.
Quality
184 tests passing, including real-bubblewrap isolation tests; tsc --noEmit clean.
AI-generated with OpenCode — primary model: DeepSeek V4.1 Flash.