Capture what matters, queue it locally, send it back.
Local-first macOS selection-to-action queue. No account. No telemetry. No hosted AI by default.
Bronze sits beside the app you are already in. Capture the selection, order the work, copy it back. It is not a clipboard recorder, a task manager, a note vault, or an AI client.
macOS 14 (Sonoma) or later, Apple Silicon and Intel. Homebrew 7 refuses the cask until the tap is trusted.
brew tap NxT-Solutions/nxt-solutions-packages
brew trust nxt-solutions/nxt-solutions-packages
brew install --cask bronze
brew upgrade --cask bronzeOr download bronze-macos-arm64.pkg or bronze-macos-x86_64.pkg from Releases. Settings shows the running version. Check for updates is a button (ADR-023 Proposed). Homebrew installs copy brew upgrade --cask bronze. A package install opens the GitHub release.
The cask appears after the first published .pkg. Until then, use the GitHub asset. Current GitHub Release packages are ad-hoc (signingIdentity: "-"), not Developer ID. An ad-hoc upgrade is a new binary identity, so Accessibility and Input Monitoring must be added again. Those grants persist across versions only when every release is signed with the same Developer ID Application certificate. Unsigned packages are not a notarization claim.
- Capture selected text from the frontmost app (Accessibility first, bounded clipboard fallback)
- Queue items locally in SQLite, with copy, complete, skip, and trash
- Copy writes a pasteboard payload you can drop into any app
- On this Mac title engines, plus optional loopback Ollama or opt-in hosted keys
- Offline by default — no account, analytics, or remote fonts
The native app is macOS-only (macOS 14 or later). Ubuntu CI runs the portable Rust crates and leaves bronze-desktop out.
Pins match CI: Node 24.21.0 (package.json engines and .github/workflows/ci.yml), pnpm 12.4.2 (package.json packageManager), rustc 1.98.1 (rust-toolchain.toml). Swift tools 6.0 is declared in native/macos/BronzeNative/Package.swift. Do not use Corepack.
- Install the Xcode app so Swift 6 and the Apple SDKs are available.
native/macos/BronzeNative/Package.swiftdeclares// swift-tools-version: 6.0. The desktop build linkslibBronzeNative.afrom that package.
xcode-select -p
swift --versionswift --version reports Swift 6.
- Install rustup. From this clone,
rust-toolchain.tomlselects 1.98.1:
rustup show- Install Node 24.21.0, then pnpm. Do not use Corepack. npm 11 only links pnpm's native binary when pnpm's install script is allowed.
--allow-scripts=pnpmnames that one package. It does not turn script security off.pnpm-workspace.yamlallowBuildsallowspnpmandesbuildfor installs that pnpm runs.
node -v
npm install -g --allow-scripts=pnpm pnpm@12.4.2
pnpm -vnode -v prints v24.21.0. pnpm -v prints 12.4.2 and does not say pnpm is running through Node.js. If that line appears, command -v pnpm is not this binary.
- CMake builds
llama-cpp-sys-2for the on-this-Mac title engine. The macOS CI job installs CMake when it is missing. The release workflow sets the macOS 14 deployment target for that CMake build. Export the same variables in the shell you use fortauri devandpnpm verify. Swift already links witharm64-apple-macosx14.0orx86_64-apple-macosx14.0fromapps/desktop/src-tauri/build.rs.
cmake --version || brew install cmake
export MACOSX_DEPLOYMENT_TARGET=14.0
export CMAKE_OSX_DEPLOYMENT_TARGET=14.0- Clone and install JavaScript dependencies.
git clone https://github.com/NxT-Solutions/Bronze.git
cd Bronze
pnpm install- Run the desktop app. Hand-test only in the native window. Opening the HTML files in a browser has no Tauri invoke. A dev build compiles when
crates/bronze-title-model/vendor/contains no.gguf. Releasebronze-macos-*.pkgfiles omit those GGUFs. A selected pin first-fetches once into Application Supporttitle-models/<sha256>/(ADR-024); a matching checksum is reused on upgrade. Extractive titles work with no download. Local vendor remainssh crates/bronze-title-model/scripts/vendor-gguf.sh <id>.
pnpm --filter desktop tauri dev- Maintainer bar: Biome, workspace lint, typecheck, tests, validate,
cargo fmt, Clippy,cargo test, andpython3 tooling/planning-checks.py.
pnpm verifyA local debug package (unsigned) is tooling/package-debug.sh. A debug or ad-hoc .app cannot keep Accessibility or Input Monitoring across rebuilds: each binary has a new cdhash. Pull requests run the CI quality jobs. CI does not notarize and has no Apple signing secrets.
pnpm visual compares the Queue, Settings, Library, and Help WebView screens to baselines in apps/desktop/visual/. pnpm visual:update rewrites the baselines CI checks. Refresh one scenario with pnpm visual:update -- -g "queue populated".
Both commands run the pinned Playwright Linux image (apps/desktop/visual/pin.mjs) through Docker, for this machine's CPU. Snapshot files end in -arm64 or -x64. Ubuntu CI compares the -x64 baselines. Docker is required. On Apple Silicon, VISUAL_PLATFORM=linux/amd64 pnpm visual:update writes the -x64 baselines when that emulator can start Chromium. When it cannot, copy the actual images from the visual-diffs artifact onto those -x64 files in the same pull request.
When a pull request adds or changes a screen, control, or layout, update the visual scenario and its baselines in that pull request. A new feature that does not update its scenario is incomplete.
A failing run uploads the diff images as the visual-diffs artifact.
- Build the GitNexus index from the repo root. GitNexus is contributor tooling outside the Bronze app. The index stays on this machine. This repo pins pnpm, and Node 24's npm can crash
npxwhile installing GitNexus, so the rebuild command is:
pnpm --allow-build=@ladybugdb/core --allow-build=gitnexus --allow-build=tree-sitter dlx gitnexus@latest analyzeRun that once after every fresh clone. It writes .gitnexus/ (LadybugDB graph, parse cache, and the local runner). .gitnexusrc sets defaultBranch to main, noStats, and skipContextFiles, so analyze leaves AGENTS.md and CLAUDE.md in place. Those files already contain the GitNexus section after the Bronze contract. Embeddings stay off, so analyze does not download a model. GitNexus is not a dependency of the Bronze app, and the app does not read the index (ADR-017).
Committed, so every clone matches. The skill files are the GitNexus 1.6.12 suite (gitnexus-exploring, gitnexus-debugging, gitnexus-impact-analysis, gitnexus-refactoring, gitnexus-guide, gitnexus-cli, gitnexus-plan, gitnexus-work, gitnexus-review, gitnexus-lfg, gitnexus-pdg-query, gitnexus-taint-analysis):
| Path | What it is |
|---|---|
.gitnexusrc |
Index defaults for this repo |
.claude/skills/gitnexus-*, .agents/skills/gitnexus-*, .cursor/skills/gitnexus-*, .opencode/skills/gitnexus-*, .grok/skills/gitnexus-* |
Shared agent skills |
.cursor/hooks.json, hooks/*.cjs |
Cursor post-tool hook |
.claude/hooks/gitnexus/, .claude/settings.json |
Claude Code PreToolUse and PostToolUse hooks |
.codex/hooks.json, .codex/hooks/gitnexus/ |
Codex hooks |
.cursor/mcp.json, .mcp.json, .codex/config.toml, opencode.json, .grok/config.toml, .factory/mcp.json |
Shared editor MCP config |
.gitignore |
Rules for the generated index and local secrets |
Gitignored, rebuilt or created on each machine:
| Path | What it is |
|---|---|
.gitnexus/ |
Generated index, LadybugDB graph, parse cache, local runner |
.env, .env.* |
Secrets, including a GitNexus eval-server token. .env.example stays trackable |
- Cursor loads the committed
.cursor/mcp.json. Enable GitNexus once under Cursor Settings → MCP. That approval stays on this machine.
Committed MCP entries start the same server, npx -y gitnexus@latest mcp (OpenCode passes that as a local command array):
| Editor | File |
|---|---|
| Cursor | .cursor/mcp.json |
| Claude Code | .mcp.json |
| Codex | .codex/config.toml |
| OpenCode | opencode.json |
| Grok | .grok/config.toml |
| Factory Droid | .factory/mcp.json |
Each editor reads the committed tree for this clone:
| Editor | Skills and hooks | MCP |
|---|---|---|
| Cursor | .cursor/skills/gitnexus-*, .cursor/hooks.json, hooks/ |
.cursor/mcp.json |
| Claude Code | .claude/skills/gitnexus-*, .claude/hooks/gitnexus/ |
.mcp.json |
| Codex | .agents/skills/gitnexus-*, .codex/hooks.json |
.codex/config.toml |
| OpenCode | .opencode/skills/gitnexus-* |
opencode.json |
| Grok | .grok/skills/gitnexus-*, plus AGENTS.md and the Claude and Cursor trees |
.grok/config.toml |
| Factory Droid | AGENTS.md |
.factory/mcp.json |
Claude Code asks once to trust .mcp.json. Codex and Grok read the project file after the repo is trusted. Codex may ask once, in /hooks, before the committed hook runs.
Antigravity, CodeBuddy, Qoder, and Windsurf keep MCP in the home directory. npx gitnexus setup writes the GitNexus entries it knows. The server object is the same mcpServers.gitnexus block. Those home files are per machine and are not committed.
| Editor | Home file |
|---|---|
| Antigravity | ~/.gemini/antigravity/mcp_config.json |
| CodeBuddy | ~/.codebuddy/.mcp.json |
| Qoder | ~/.qoder.json |
| Windsurf | ~/.codeium/windsurf/mcp_config.json |
The registry of indexed repos stays in ~/.gitnexus/ on this machine. That directory is outside the clone.
Permissions: Accessibility and Input Monitoring. Bronze never asks for Screen Recording.
| Check | Where |
|---|---|
| Biome, typecheck, JS tests, i18n validate | quality-js |
| WebView screenshot baselines | quality-visual |
| Planning-pack gates | quality-docs |
cargo fmt, Clippy, portable crate tests |
quality-rust |
macOS Clippy and tests except bronze-desktop |
quality-macos |
| Desktop crate tests | quality-app on macos-15 |
| Full workspace including Swift | pnpm verify on a Mac |
Do not claim WCAG, VoiceOver, or notarization without files in docs/evidence/.
See CONTRIBUTING.md. Work lands through a pull request to main. Changelog: CHANGELOG.md. Security: SECURITY.md.
ADR-002 is Accepted (split arm64 and Intel packages; the operator asked for the Intel build). ADR-009, ADR-018, and ADR-023 stay Proposed unless a human accepts them.
MIT. See LICENSE. Copyright 2026 Noah Gillard.
Requirement IDs in docs/03-prd.md and docs/18-adrs.md remain authority.
- Executive summary
- Reference product and video analysis
- Competitive landscape
- Product requirements document
- Functional specification
- UX and interaction specification
- System architecture
- macOS capture reliability
- Data model and portability
- Security, privacy, and threat model
- Accessibility conformance plan
- Internationalization
- Settings and shortcuts
- Testing, quality, and release
- Agentic implementation plan
- Backlog and traceability
- Cooper OSS audit
- Agent-skill recommendations
- Architecture decisions
- Sources and evidence
- Implementation bootstrap
- Pre-implementation reconciliation
- bmad-loop policy
Implementation agents: AGENTS.md. Local run notes and the long hand-test list live in docs/20-implementation-bootstrap.md and the git history of this file. Visual direction: assets/bronze-ui-concept.png (inspiration only). Asset provenance: assets/README.md.



