Skip to content

Releases: UnixUserDev/byoa

byoa v0.2.1 — workspace safety

Choose a tag to compare

@UnixUserDev UnixUserDev released this 19 Oct 16:43

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 --version

Keep 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 --version

Safety: $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

Choose a tag to compare

@UnixUserDev UnixUserDev released this 19 Oct 16:22

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 --version

Keep 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 --version

New: --tui

byoa --tui
byoa --tui --provider lmstudio --model google/gemma-4-e4b

A 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: a allow, d/Esc deny, Enter denies by default.
  • Ctrl+T reasoning, Ctrl+O tools, PgUp/PgDn scroll, Ctrl+C cancel.
  • 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 inside node_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 bubblewrap for 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

Choose a tag to compare

@UnixUserDev UnixUserDev released this 19 Oct 16:04

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 --version

npm-installable tarball:

npm install -g ./byoa-0.1.0-npm.tgz
byoa --version

Both 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, ulimit limits, fail-closed strict mode.
  • 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 to memory/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 bubblewrap for 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.