diff --git a/.cursor/worktrees.json b/.cursor/worktrees.json
new file mode 100644
index 00000000..89a45abb
--- /dev/null
+++ b/.cursor/worktrees.json
@@ -0,0 +1,3 @@
+{
+ "setup-worktree": ["pnpm run setup"]
+}
diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
new file mode 100644
index 00000000..5d883bce
--- /dev/null
+++ b/.github/workflows/build.yml
@@ -0,0 +1,101 @@
+name: Build and Release
+
+on:
+ pull_request:
+ branches:
+ - main
+ workflow_dispatch:
+ inputs:
+ release_tag:
+ description: "Release tag (e.g. v0.14.5). Leave empty to skip release creation."
+ required: false
+ default: ""
+
+jobs:
+ build:
+ runs-on: macos-latest
+ permissions:
+ contents: write
+ strategy:
+ fail-fast: false
+ matrix:
+ target:
+ - aarch64-apple-darwin
+ - x86_64-apple-darwin
+ steps:
+ - uses: actions/checkout@v4
+ with:
+ lfs: true
+ - name: Install Rust toolchain
+ uses: actions-rust-lang/setup-rust-toolchain@v1
+ with:
+ toolchain: stable
+ cache: true
+ - name: Install Node.js
+ uses: actions/setup-node@v4
+ with:
+ node-version: 22
+ - name: Install pnpm
+ uses: pnpm/action-setup@v4
+ with:
+ version: 9
+ - name: Install dependencies
+ run: pnpm install --frozen-lockfile
+ - name: Build for ${{ matrix.target }}
+ run: |
+ rustup target add ${{ matrix.target }}
+ pnpm tauri build --target ${{ matrix.target }} --config '{"bundle":{"createUpdaterArtifacts":false}}'
+ env:
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+ - name: Zip .app bundle
+ run: |
+ cd src-tauri/target/${{ matrix.target }}/release/bundle/macos
+ zip -r Chorus.app.zip Chorus.app
+ - name: Upload Artifacts
+ uses: actions/upload-artifact@v4
+ with:
+ name: bundle-${{ matrix.target }}
+ path: |
+ src-tauri/target/${{ matrix.target }}/release/bundle/macos/Chorus.app.zip
+ src-tauri/target/${{ matrix.target }}/release/bundle/dmg/*.dmg
+
+ release:
+ needs: build
+ if: github.event_name == 'workflow_dispatch' && github.event.inputs.release_tag != ''
+ runs-on: ubuntu-latest
+ permissions:
+ contents: write
+ steps:
+ - uses: actions/checkout@v4
+ - name: Download all artifacts
+ uses: actions/download-artifact@v4
+ with:
+ path: artifacts
+ - name: Rename artifacts for clarity
+ run: |
+ mkdir -p release-assets
+ # aarch64 (Apple Silicon)
+ cp artifacts/bundle-aarch64-apple-darwin/macos/Chorus.app.zip release-assets/Chorus-aarch64.app.zip
+ cp artifacts/bundle-aarch64-apple-darwin/dmg/*.dmg release-assets/ 2>/dev/null && \
+ mv release-assets/Chorus_*.dmg release-assets/Chorus-aarch64.dmg || true
+ # x86_64 (Intel)
+ cp artifacts/bundle-x86_64-apple-darwin/macos/Chorus.app.zip release-assets/Chorus-x86_64.app.zip
+ cp artifacts/bundle-x86_64-apple-darwin/dmg/*.dmg release-assets/ 2>/dev/null && \
+ mv release-assets/Chorus_*.dmg release-assets/Chorus-x86_64.dmg || true
+ ls -la release-assets/
+ - name: Create GitHub Release
+ uses: softprops/action-gh-release@v2
+ with:
+ tag_name: ${{ github.event.inputs.release_tag }}
+ name: ${{ github.event.inputs.release_tag }}
+ body: |
+ ## Chorus ${{ github.event.inputs.release_tag }}
+
+ ### Downloads
+ - **Apple Silicon (M1/M2/M3):** `Chorus-aarch64.app.zip` or `Chorus-aarch64.dmg`
+ - **Intel:** `Chorus-x86_64.app.zip` or `Chorus-x86_64.dmg`
+
+ > **Note:** This app is not code-signed. On first launch, right-click the app and select "Open" to bypass Gatekeeper.
+ files: release-assets/*
+ draft: false
+ prerelease: false
diff --git a/.prettierignore b/.prettierignore
index c07fc69f..9cf3f481 100644
--- a/.prettierignore
+++ b/.prettierignore
@@ -1,3 +1,4 @@
src-tauri/gen
pnpm-lock.yaml
-.github
\ No newline at end of file
+.github
+.context
diff --git a/BUILD.md b/BUILD.md
new file mode 100644
index 00000000..52ab48fa
--- /dev/null
+++ b/BUILD.md
@@ -0,0 +1,36 @@
+# Building Chorus
+
+Chorus is built using Tauri, React, TypeScript, and Rust. To build the application yourself, follow these steps.
+
+## Prerequisites
+
+- [Node.js](https://nodejs.org/) (version >= 22.0.0)
+- [pnpm](https://pnpm.io/)
+- [Rust](https://www.rust-lang.org/) and Cargo
+- [Git LFS](https://git-lfs.com/)
+
+## Installation
+
+1. Clone the repository and navigate to the directory.
+2. Initialize Git LFS:
+
+ ```bash
+ git lfs install --force
+ git lfs pull
+ ```
+
+3. Install dependencies:
+
+ ```bash
+ pnpm install
+ ```
+
+## Building the App
+
+To build the production app for your platform, run:
+
+```bash
+pnpm tauri build
+```
+
+This will generate the application bundle (e.g., `.app` for macOS) in `src-tauri/target/release/bundle/`.
diff --git a/CHANGELOG.md b/CHANGELOG.md
new file mode 100644
index 00000000..19a18b46
--- /dev/null
+++ b/CHANGELOG.md
@@ -0,0 +1,197 @@
+# Changelog
+
+## v0.14.15
+
+Released 2026-04-09
+
+### Features
+
+- Per-tool and per-project YOLO mode for granular auto-accept permissions
+- OpenRouter actual model attribution and cost tracking in streaming responses
+- Multiple sub-provider filter selection in model search
+- Collapsible chat input for long text
+
+### Improvements
+
+- Improved fuzzy search with scored substring matching and provider filtering
+- Better autorouter/freerouter labels and free-tier display names
+- Selected provider chips stay visible during search
+
+### Fixes
+
+- Fix YOLO deny precedence and memoize permission tool list
+- Fix MCP terminal startup
+- Fix model_config UUID passed when replying to single model
+- Migration 145 legacy compatibility for dev instances
+
+## v0.14.14
+
+Released 2026-04-07
+
+- **Fix profile model selection fallback** - profile model selection now falls back correctly instead of leaving compare state in a bad state.
+- **Fix cmd+number keyboard navigation** - selected blocks and columns now scroll into view when using cmd+number.
+- **Fix cmd+number toggle-off behavior** - reselecting the same block with cmd+number now deselects it as expected.
+
+### Downloads
+
+- **Apple Silicon (M1/M2/M3):** `Chorus-aarch64.app.zip` or `Chorus-aarch64.dmg`
+- **Intel:** `Chorus-x86_64.app.zip` or `Chorus-x86_64.dmg`
+
+> **Note:** This app is not code-signed. On first launch, right-click the app and select "Open" to bypass Gatekeeper. Alternatively, run:
+>
+> ```
+> xattr -d com.apple.quarantine /Applications/Chorus.app
+> ```
+
+## 0.14.6-PRE (pre-release)
+
+Released 2026-04-08
+
+This is a testing build which should have the same feature-set as v0.14.14. Intended use is for proof-of-concept for merging with base fork meltylabs/chorus
+
+### Downloads
+
+- **Apple Silicon (M1/M2/M3):** `Chorus-aarch64.app.zip` or `Chorus-aarch64.dmg`
+- **Intel:** `Chorus-x86_64.app.zip` or `Chorus-x86_64.dmg`
+
+> **Note:** This app is not code-signed. On first launch, right-click the app and select "Open" to bypass Gatekeeper. Alternatively, run:
+>
+> ```
+> xattr -d com.apple.quarantine /Applications/Chorus.app
+> ```
+
+## v0.14.13
+
+Released 2026-03-31
+
+- **Deselect model block when clicking outside or re-clicking** — exit the model block reorder mode by clicking anywhere outside or re-clicking the selected block
+- **Fix sidepane blur on reply messages** — reply messages in the sidepane no longer have the blur effect incorrectly applied
+- **Fix cmd+number keybindings** — cmd+1-8 now works for both tools and compare blocks; cmd+1 always selects the leftmost column; cmd/ctrl+shift+space scrolls the selected column into view
+
+### Downloads
+
+- **Apple Silicon (M1/M2/M3):** `Chorus-aarch64.app.zip` or `Chorus-aarch64.dmg`
+- **Intel:** `Chorus-x86_64.app.zip` or `Chorus-x86_64.dmg`
+
+> **Note:** This app is not code-signed. On first launch, right-click the app and select "Open" to bypass Gatekeeper. Alternatively, run:
+>
+> ```
+> xattr -d com.apple.quarantine /Applications/Chorus.app
+> ```
+
+## v0.14.12
+
+Released 2026-03-31
+
+### New Features
+
+- **Defaults settings tab** — New Settings → Defaults section consolidates new-chat preferences: default prompt profile, default chat models (multi-model), fallback model (with optional model profile constraint), and default ambient chat model. Replaces the former separate Ambient Chat tab controls.
+
+- **Per-chat model selection persistence** — Selected models are now saved per chat. Switching chats and returning preserves your model selection. New chats are initialized from your Default Chat Models setting, falling back to the ambient compare list.
+
+- **Per-project default prompt profile** — Each project can now have its own default prompt profile (set in the project view), which overrides the global default when creating new chats in that project.
+
+- **Fresh-install model preferences** — On first launch, Gemini 2.5 Flash Lite is seeded as the default ambient, fallback, and chat model.
+
+### Downloads
+
+- **Apple Silicon (M1/M2/M3):** \`Chorus-aarch64.app.zip\` or \`Chorus-aarch64.dmg\`
+- **Intel:** \`Chorus-x86_64.app.zip\` or \`Chorus-x86_64.dmg\`
+
+> **Note:** This app is not code-signed. On first launch, right-click the app and select "Open" to bypass Gatekeeper.
+
+## v0.14.11
+
+Released 2026-03-31
+
+- Initial implementation of reorder chat functionality
+
+### Downloads
+
+- **Apple Silicon (M1/M2/M3):** `Chorus-aarch64.app.zip` or `Chorus-aarch64.dmg`
+- **Intel:** `Chorus-x86_64.app.zip` or `Chorus-x86_64.dmg`
+
+> **Note:** This app is not code-signed. On first launch, right-click the app and select "Open" to bypass Gatekeeper.
+
+## v0.14.10
+
+Released 2026-03-30
+
+### Downloads
+
+- **Apple Silicon (M1/M2/M3):** `Chorus-aarch64.app.zip` or `Chorus-aarch64.dmg`
+- **Intel:** `Chorus-x86_64.app.zip` or `Chorus-x86_64.dmg`
+
+> **Note:** This app is not code-signed. On first launch, right-click the app and select "Open" to bypass Gatekeeper.
+
+## v0.14.9
+
+Released 2026-03-30
+
+### Downloads
+
+- **Apple Silicon (M1/M2/M3):** `Chorus-aarch64.app.zip` or `Chorus-aarch64.dmg`
+- **Intel:** `Chorus-x86_64.app.zip` or `Chorus-x86_64.dmg`
+
+> **Note:** This app is not code-signed. On first launch, right-click the app and select "Open" to bypass Gatekeeper.
+
+## v0.14.8
+
+Released 2026-03-30
+
+- **Multi-Model Column Minimization**: Added a minimize button to each model column in the multi-model view to help manage your workspace.
+
+- **Automated Minimization**: Models that fail to return a response after stopping will now automatically minimize to reduce clutter.
+
+- **Sidebar Integration**: Minimized models are easily accessible in the sidebar above Projects, where they can be clicked to quickly restore the column.
+
+- **Smart Message Sending**: Minimized models are automatically excluded from new message sends until you expand them again.
+
+### Downloads
+
+- **Apple Silicon (M1/M2/M3):** `Chorus-aarch64.app.zip` or `Chorus-aarch64.dmg`
+- **Intel:** `Chorus-x86_64.app.zip` or `Chorus-x86_64.dmg`
+
+> **Note:** This app is not code-signed. On first launch, right-click the app and select "Open" to bypass Gatekeeper.
+> Alternatively, remove the quarantine flag via Terminal: `xattr -d com.apple.quarantine Chorus.app`
+
+## v0.14.7
+
+Released 2026-03-29
+
+- Add support for ⌘ Command + ⇧ Shift + A to select all models in a profile
+
+### Downloads
+
+- **Apple Silicon (M1/M2/M3):** `Chorus-aarch64.app.zip` or `Chorus-aarch64.dmg`
+- **Intel:** `Chorus-x86_64.app.zip` or `Chorus-x86_64.dmg`
+
+> **Note:** This app is not code-signed. On first launch, right-click the app and select "Open" to bypass Gatekeeper.
+
+## v0.14.6
+
+Released 2026-03-29
+
+- Update Ambient chat model to use Gemini 2.5 flash
+
+### Downloads
+
+- **Apple Silicon (M1/M2/M3):** `Chorus-aarch64.app.zip` or `Chorus-aarch64.dmg`
+- **Intel:** `Chorus-x86_64.app.zip` or `Chorus-x86_64.dmg`
+
+> **Note:** This app is not code-signed. On first launch, right-click the app and select "Open" to bypass Gatekeeper.
+
+## v0.14.5
+
+Released 2026-03-29
+
+- Added profiles for favorite models in the chat window
+- Dynamically fetch and select models from providers
+- Prompt profiles
+
+### Downloads
+
+- **Apple Silicon (M1/M2/M3):** `Chorus-aarch64.app.zip` or `Chorus-aarch64.dmg`
+- **Intel:** `Chorus-x86_64.app.zip` or `Chorus-x86_64.dmg`
+
+> **Note:** This app is not code-signed. On first launch, right-click the app and select "Open" to bypass Gatekeeper.
diff --git a/README.md b/README.md
index e682b6ea..3fac8c3d 100644
--- a/README.md
+++ b/README.md
@@ -10,6 +10,21 @@