Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions NotchBuddy/Sources/App/IslandViewContent.swift
Original file line number Diff line number Diff line change
Expand Up @@ -201,7 +201,7 @@ struct OverviewView: View {
NSWorkspace.shared.openApplication(at: url, configuration: .init(), completionHandler: nil)
}
#endif
case "agent_gemini", "agent_antigravity":
case "agent_gemini", "agent_antigravity", "agent_opencode":
#if !APPSTORE
let terminalBundleIds = ["com.apple.Terminal", "com.googlecode.iterm2",
"net.kovidgoyal.kitty", "com.mitchellh.ghostty"]
Expand Down Expand Up @@ -1580,7 +1580,7 @@ struct IntegrationCardView: View {
#else
return false
#endif
case "agent_cursor", "agent_codex":
case "agent_cursor", "agent_codex", "agent_opencode":
return false // coming soon
case "integration_music":
#if !APPSTORE
Expand Down
3 changes: 3 additions & 0 deletions NotchBuddy/Sources/App/PillCatalog.swift
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@ struct PillDefinition {
case "integration_claude": return "Claude Code"
case "agent_cursor": return "Cursor"
case "agent_codex": return "Codex"
case "agent_opencode": return "OpenCode"
default: return "Agent"
}
}
Expand All @@ -56,6 +57,8 @@ enum PillCatalog {
category: .workspace, subtitle: "Integration", source: .agent, githubOnly: true),
.init(id: "agent_codex", name: "Codex", color: "#2DD4BF",
category: .workspace, subtitle: "Integration", source: .agent, githubOnly: true),
.init(id: "agent_opencode", name: "OpenCode", color: "#5EEAD4",
category: .workspace, subtitle: "Integration", source: .agent, githubOnly: true),
// ── Agents ───────────────────────────────────────────────────────────
.init(id: "agent_gemini", name: "Gemini CLI", color: "#8AB4F8",
category: .agent, subtitle: "Agent", source: .agent, githubOnly: true),
Expand Down
2 changes: 1 addition & 1 deletion docs/AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -99,7 +99,7 @@ A **declared pill** is a catalog entry (`PillCatalog.swift`) that has been enabl

A catalog pill that is not checked in Settings behaves like any other agent: it gets an automatic pill when a session starts, and that pill is removed when the session ends.

The GitHub build exposes Gemini CLI (`agent_gemini`) and Antigravity (`agent_antigravity`) in Settings → Active pills. Cursor (`agent_cursor`) and Codex (`agent_codex`, GitHub build only) are there too — their pills can be declared and set as the main pill; session support is coming in a future version.
The GitHub build exposes Gemini CLI (`agent_gemini`) and Antigravity (`agent_antigravity`) in Settings → Active pills. Cursor (`agent_cursor`), Codex (`agent_codex`), and OpenCode (`agent_opencode`, GitHub build only) are there too — their pills can be declared and set as the main pill; session support is coming in a future version.

## Real-world examples

Expand Down
9 changes: 9 additions & 0 deletions windows/src/island/hooks.ts
Original file line number Diff line number Diff line change
Expand Up @@ -34,9 +34,18 @@ function validateAgent(raw: string | undefined): string | null {
return raw;
}

const AGENT_COLORS: Record<string, string> = {
opencode: "#5EEAD4",
gemini: "#8AB4F8",
antigravity: "#E879F9",
codex: "#2DD4BF",
cursor: "#C0C4CC",
};

const FALLBACK_COLORS = ["#22C55E", "#EAB308", "#60A5FA", "#E879F9"];

function agentColor(name: string): string {
if (AGENT_COLORS[name]) return AGENT_COLORS[name];
let h = 0;
for (let i = 0; i < name.length; i++) {
h = (Math.imul(31, h) + name.charCodeAt(i)) | 0;
Expand Down