BroV look: swamp-zombie unibrow character, new app and menu bar icons, BroV naming in UI

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
maksarsanjeev
2026-10-06 19:53:47 +03:00
parent 0f77ec8704
commit 7d76986bc0
22 changed files with 422 additions and 54 deletions
+9 -9
View File
@@ -119,7 +119,7 @@ struct SettingsView: View {
.resizable()
.frame(width: 32, height: 32)
VStack(alignment: .leading, spacing: 1) {
Text("Coucou")
Text("BroV")
.font(.system(size: 13, weight: .semibold))
Text(appVersion)
.font(.system(size: 11))
@@ -301,14 +301,14 @@ struct SettingsView: View {
VStack(alignment: .leading, spacing: 6) {
Toggle("Show my agent sessions on my iPhone", isOn: $iPhoneSyncEnabled)
.onChange(of: iPhoneSyncEnabled) { _, on in CloudProbe.shared.setEnabled(on) }
Text("Sends your sessions to your private iCloud for the Coucou iPhone app. Project names, commands and questions are encrypted with your iCloud keys. Turning it off deletes them from iCloud.")
Text("Sends your sessions to your private iCloud for the BroV iPhone app. Project names, commands and questions are encrypted with your iCloud keys. Turning it off deletes them from iCloud.")
.font(.system(size: 11))
.foregroundColor(.secondary)
.fixedSize(horizontal: false, vertical: true)
Toggle("Move Mochi to my iPhone's Dynamic Island when my Mac is locked", isOn: $iPhoneLiveActivityEnabled)
.disabled(!iPhoneSyncEnabled)
.onChange(of: iPhoneLiveActivityEnabled) { _, on in LiveActivityRelay.shared.setEnabled(on) }
Text("Goes through the Coucou relay to Apple's push service. Only the agent's name and state are sent: no project name, command or path.")
Text("Goes through the BroV relay to Apple's push service. Only the agent's name and state are sent: no project name, command or path.")
.font(.system(size: 11))
.foregroundColor(.secondary)
.fixedSize(horizontal: false, vertical: true)
@@ -332,7 +332,7 @@ struct SettingsView: View {
@ViewBuilder private var activePillsSection: some View {
GroupBox {
VStack(alignment: .leading, spacing: 10) {
Text("Choose the tools you use. Coucou only shows what you declare here.")
Text("Choose the tools you use. BroV only shows what you declare here.")
.font(.system(size: 11))
.foregroundColor(.secondary)
@@ -534,7 +534,7 @@ struct SettingsView: View {
GroupBox("Plan usage") {
VStack(alignment: .leading, spacing: 10) {
Text("Shows your Claude plan usage (5-hour and weekly limits) in the notch header. Coucou adds a status line relay to ~/.claude/settings.json. If you already have a status line, it keeps working as before. Pro and Max plans only.")
Text("Shows your Claude plan usage (5-hour and weekly limits) in the notch header. BroV adds a status line relay to ~/.claude/settings.json. If you already have a status line, it keeps working as before. Pro and Max plans only.")
.font(.system(size: 11))
.foregroundColor(.secondary)
.fixedSize(horizontal: false, vertical: true)
@@ -936,7 +936,7 @@ struct SettingsView: View {
private func installHooksAppStore() {
guard let claudeURL = pickClaudeFolder(prompt: "Select") else { return }
let alert = NSAlert()
alert.messageText = "Install Coucou hooks in ~/.claude?"
alert.messageText = "Install BroV hooks in ~/.claude?"
alert.informativeText = "Will write:\n• ~/.claude/coucou/nb-hook\n• ~/.claude/settings.json (backup created first)"
alert.addButton(withTitle: "Install")
alert.addButton(withTitle: "Cancel")
@@ -1036,7 +1036,7 @@ struct SettingsView: View {
pendingGeminiJSON = try HookServer.shared.previewGeminiHooks(install: install)
showGeminiDiff = true
statusMessage = "Review the JSON below before confirming."
} catch let e as NSError where e.domain == "CoucouNoop" {
} catch let e as NSError where e.domain == "BroVNoop" {
statusMessage = e.localizedDescription
} catch {
statusMessage = "❌ \(error.localizedDescription)"
@@ -1063,7 +1063,7 @@ struct SettingsView: View {
pendingAgyJSON = try HookServer.shared.previewAgyHooks(install: install)
showAgyDiff = true
statusMessage = "Review the JSON below before confirming."
} catch let e as NSError where e.domain == "CoucouNoop" {
} catch let e as NSError where e.domain == "BroVNoop" {
statusMessage = e.localizedDescription
} catch {
statusMessage = "❌ \(error.localizedDescription)"
@@ -1090,7 +1090,7 @@ struct SettingsView: View {
pendingCodexJSON = try HookServer.shared.previewCodexHooks(install: install)
showCodexDiff = true
statusMessage = "Review the JSON below before confirming."
} catch let e as NSError where e.domain == "CoucouNoop" {
} catch let e as NSError where e.domain == "BroVNoop" {
statusMessage = e.localizedDescription
} catch {
statusMessage = "❌ \(error.localizedDescription)"