a desktop app for getting work done with any model
  • TypeScript 70.2%
  • Rust 25.3%
  • JavaScript 1.5%
  • PowerShell 0.9%
  • Shell 0.8%
  • Other 1.2%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
Phil Azar e25424da3f
fix(goose): let goose config.yaml DATABRICKS_HOST win over env (#388)
## Summary
Goose only reads `DATABRICKS_HOST` from `config.yaml` when the env var
is unset, so the value Berd injects from the shell and runtime config
always shadowed a user's goose config. Now, when the user's goose config
has a valid `DATABRICKS_HOST`, Berd removes the env var before it spawns
`goose serve`. Goose then reads the host from its config file. Berd
removes the var instead of copying the value in, so goose keeps
re-reading the file: settings edits apply live, and the host stays
paired with the token stored in the same file.

- A value counts as valid if it's an HTTPS URL with no credentials,
query, or fragment. Path prefixes are allowed so pass-through proxies
work.
- If the value is missing or invalid, Berd keeps today's env value and
logs a warning.
- The override is skipped in E2E mode, and whenever the child would
resolve a different config root than Berd (`GOOSE_PATH_ROOT`, `HOME`,
`XDG_CONFIG_HOME`, `APPDATA`, `USERPROFILE`), so an isolated goose root
never picks up the real user config.


Also fixes a flaky `message_search` test: `secure_cache_permissions`
could hit ENOENT when a closing SQLite connection deleted its
`-wal`/`-shm` files between the `exists()` check and
`set_permissions()`. A missing sidecar is now treated as success.

### Related issue
N/A

### Testing
- New unit tests cover config parsing and validation, the env override,
and the config-root guard: `cargo test --lib -- databricks_host
config_environment` (7 passed).
- The flaky
`reopening_after_offline_delete_cannot_preserve_prior_generation_rows`
test failed 1 in 30 runs before the fix and passed 60 of 60 after.
- The pre-push hooks passed (fmt-check, check, tauri-check, clippy).

🤖 Generated with [Claude Code](https://claude.com/claude-code)

---------

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-14 13:54:51 -05:00
.agents fix(skills): gate skill discovery behind a build feature for public builds (#262) 2026-08-31 20:56:40 -07:00
.cargo perf(dev): reduce Rust debug build cost (#253) 2026-09-03 16:12:15 -04:00
.github fix(windows): keep the Windows script tests runnable on Windows PowerShell 5.1 (#329) 2026-09-16 02:17:35 -07:00
.vscode perf(dev): reduce Rust debug build cost (#253) 2026-09-03 16:12:15 -04:00
bb-cli docs: warn about bb-cli migration (#337) 2026-09-22 17:00:03 +00:00
bin perf(dev): share Cargo package cache across worktrees (#199) 2026-09-03 16:15:12 -04:00
crates/builderbot-auth Simplify Compose control-plane authentication (#38) 2026-08-18 11:23:53 -04:00
distro feat: add Goose context budget settings (#371) 2026-10-05 10:48:22 -04:00
docker/linux feat: add guarded release workflow (#10) 2026-08-12 18:28:51 -07:00
docs fix(berdctl): authenticate local control requests (#272) 2026-10-08 10:49:47 -07:00
LAWS docs(laws): define queue admission and dispatch (#65) 2026-08-18 16:13:40 -04:00
public chore: port repository (#2) 2026-08-12 16:35:42 -07:00
release-agents ci: synchronize release configuration across builds (#22) 2026-08-13 10:21:03 -07:00
resources remove the nun figgie and preserve avatar fallbacks (#362) 2026-09-25 15:31:50 +00:00
scripts fix(berdctl): authenticate local control requests (#272) 2026-10-08 10:49:47 -07:00
sdk chore: update React and TypeScript dependencies (#236) 2026-08-26 17:31:03 -07:00
skills publish the Buzz Handoff skill (#94) 2026-08-20 16:15:04 -07:00
src feat(notifications): add configurable in-app toast duration (#366) 2026-10-13 06:55:16 -04:00
src-tauri fix(goose): let goose config.yaml DATABRICKS_HOST win over env (#388) 2026-10-14 13:54:51 -05:00
tests feat(berd-call): bundle CLI with Berd and check updates on call start (#360) 2026-10-05 15:30:53 -04:00
tools chore: port repository (#2) 2026-08-12 16:35:42 -07:00
.gitattributes chore: port repository (#2) 2026-08-12 16:35:42 -07:00
.gitignore perf(dev): reduce Rust debug build cost (#253) 2026-09-03 16:12:15 -04:00
acp-tools.lock.json enable Astra for Codex ACP sessions (#315) 2026-09-09 21:00:55 +00:00
AGENTS.md BOT-1571: Clarify stable project IDs after project rename (#341) 2026-10-12 20:57:04 -04:00
app-icon.png chore: port repository (#2) 2026-08-12 16:35:42 -07:00
biome.json fix(acp): install managed ACP bridges by replaying a release-controlled lockfile with npm ci (#48) 2026-08-18 20:06:43 -04:00
CHANGELOG.md chore: release v0.6.4 (#317) 2026-09-10 09:55:20 -07:00
CLAUDE.md chore: port repository (#2) 2026-08-12 16:35:42 -07:00
CODE_OF_CONDUCT.md chore: port repository (#2) 2026-08-12 16:35:42 -07:00
CODEOWNERS docs: establish the OSS contribution front door (#31) 2026-08-14 12:14:02 -05:00
CONTRIBUTING.md docs: establish the OSS contribution front door (#31) 2026-08-14 12:14:02 -05:00
DESIGN.md chore: port repository (#2) 2026-08-12 16:35:42 -07:00
doctor.config.ts chore: port repository (#2) 2026-08-12 16:35:42 -07:00
goose-backend.lock.json chore: bump Goose backend for GPT 6.1 Sol compaction (#378) 2026-10-05 17:50:42 -04:00
GOVERNANCE.md chore: port repository (#2) 2026-08-12 16:35:42 -07:00
index.html chore: port repository (#2) 2026-08-12 16:35:42 -07:00
justfile feat(berd-call): bundle CLI with Berd and check updates on call start (#360) 2026-10-05 15:30:53 -04:00
lefthook.yml chore: port repository (#2) 2026-08-12 16:35:42 -07:00
LICENSE Initial commit 2026-08-11 16:05:41 +00:00
node-runtime.lock.json chore: port repository (#2) 2026-08-12 16:35:42 -07:00
package.json fix: render bracket equations and prevent duplicate math (#377) 2026-10-06 20:22:51 +00:00
playwright.config.ts feat(voice): configure independent speech endpoints (#359) 2026-10-05 14:47:23 -04:00
playwright.table-overflow.config.ts Handle unavailable remote sessions gracefully (#306) 2026-09-09 16:54:53 -07:00
pnpm-lock.yaml fix: render bracket equations and prevent duplicate math (#377) 2026-10-06 20:22:51 +00:00
pnpm-workspace.yaml fix(deps): bump js-yaml override to 4.3.2 to patch GHSA-5p4m-2wfm-xmqj (#254) 2026-09-01 10:42:58 +10:00
postcss.config.js chore: port repository (#2) 2026-08-12 16:35:42 -07:00
PRODUCT.md chore: port repository (#2) 2026-08-12 16:35:42 -07:00
README.md publish the Buzz Handoff skill (#94) 2026-08-20 16:15:04 -07:00
renovate.json chore: enforce a seven-day crate cooldown (#155) 2026-08-20 16:51:59 -07:00
rust-toolchain.toml chore: port repository (#2) 2026-08-12 16:35:42 -07:00
SECURITY.md chore: port repository (#2) 2026-08-12 16:35:42 -07:00
TELEMETRY.md Create TELEMETRY.md for telemetry information (#86) 2026-08-18 19:42:38 +00:00
tsconfig.json chore: port repository (#2) 2026-08-12 16:35:42 -07:00
tsconfig.node.json chore: port repository (#2) 2026-08-12 16:35:42 -07:00
vite.config.ts feat(telemetry): add the OpenTelemetry pipeline and core Berd events (#16) 2026-08-18 07:50:51 -07:00
vitest.app-e2e.config.ts chore: port repository (#2) 2026-08-12 16:35:42 -07:00
vitest.config.ts chore: port repository (#2) 2026-08-12 16:35:42 -07:00
vitest.release-scripts.config.ts chore: port repository (#2) 2026-08-12 16:35:42 -07:00

Berd

Berd is an open-source desktop app for working with AI agents. It is built with Tauri 2 and React 19 and talks to the upstream Goose backend through the ACP WebSocket served by a goose serve sidecar.

The repository builds a general-purpose public distribution. Organizations can also create enterprise distributions by supplying managed provider settings, private resources, and release infrastructure through the repository's distribution seams without adding private material to the public source tree.

Getting started

just setup
just dev

just setup installs pnpm dependencies, builds the vendored @aaif/goose-sdk, and prepares the Goose backend pinned by goose-backend.lock.json in your platform cache directory. just dev reuses that stamped pinned binary and fails if the lockfile commit no longer matches the cached build.

If you already have an upstream Goose binary you want to test, set GOOSE_BIN=/path/to/goose before running just dev; that is an explicit local override and bypasses the managed pinned checkout.

To bump the default Goose backend, update the lockfile in a PR:

scripts/update-goose-backend-lock.sh main # or a tag/branch/sha
just goose-sync                          # fetch/build the new pinned commit

Bundling and distributions

Tauri bundles the Goose backend as an external sidecar. By default, just bundle stages the pinned managed Goose binary from goose-backend.lock.json and then runs pnpm tauri build:

just bundle

You can stage an explicit local binary with GOOSE_BIN=/path/to/goose just stage-sidecar. Staging creates src-tauri/binaries/goosed-<rust-host-triple>, matching the "externalBin": ["binaries/goosed"] entry in src-tauri/tauri.conf.json.

The public build is self-contained and does not require private package registries or enterprise credentials. Enterprise distributors may overlay private agents, runtime configuration, optional companion tools, update channels, and signing or publishing infrastructure in their own private build orchestration.

Optional companion CLI

Berd includes a distribution seam for bundling an optional companion CLI as an app resource. The public app does not require a private CLI package; enterprise distributors can provide and package their own implementation while retaining the normal Berd build and validation flow.

Public Agent Skills

Berd publishes portable Agent Skills under skills/. These can be installed independently of the Berd app and are separate from the contributor workflows under .agents/skills/ and the starter skills bundled under distro/skills/.

The first published skill, buzz-handoff, brings Buzz channel or thread context into a private agent conversation and can send an explicitly approved reply through the public Buzz CLI.

Adding an experiment

Experiments are user-local preferences for unstable UI or workflow behavior. Untouched experiments follow the global auto-enable setting, which defaults on in dev builds and off in production builds. Use .agents/skills/experimental-features/SKILL.md for the current workflow, registry contract, storage rules, Tauri guardrails, and test coverage.

Participating

Berd is built by a small team at Block, in the open. You can read the source, build it, and fork it freely — but we don't accept pull requests from outside authorized repository collaborators, and outside PRs are closed automatically.

The way to participate is to open a well-formed issue. A bug report we can reproduce is worth more to us than a patch, because it's the part we can't do ourselves. CONTRIBUTING.md spells out exactly what each kind of issue needs; the issue forms require it.

Filing one? Hand this to your coding agent:

Read https://raw.githubusercontent.com/block/berd/main/CONTRIBUTING.md
and help me file a Berd issue. Interview me for anything the guide
requires that I haven't given you, and tell me if what I'm reporting
is actually two separate issues.

Please also review the Code of Conduct and Security Policy. Never report a security vulnerability as a public issue.

Useful commands

  • just check — Biome, design-system, i18n, contract, and type checks
  • just test — unit and component tests
  • just tauri-check — Rust type check with sidecars disabled
  • just clippy — Rust lint with warnings denied
  • just bundle — stage the pinned Goose backend and run pnpm tauri build