diff --git a/desktop/public/harness-logos/CREDITS.md b/desktop/public/harness-logos/CREDITS.md
index de4e003c3f..b5d4b09d38 100644
--- a/desktop/public/harness-logos/CREDITS.md
+++ b/desktop/public/harness-logos/CREDITS.md
@@ -14,6 +14,7 @@ license permits redistribution.
| `omp.svg` | [can1357/oh-my-pi](https://github.com/can1357/oh-my-pi) | `667111575ebba136dadfd6989379e7f67e0d40d9` | MIT © 2025 Mario Zechner; © 2025–2026 Can Bölük | `assets/icon.svg` | None |
| `kimi.png` | [MoonshotAI/kimi-cli](https://github.com/MoonshotAI/kimi-cli) | `4a550effdfcb29a25a5d325bf935296cc50cd417` | Apache-2.0; NOTICE: Kimi Code CLI © 2025 Moonshot AI | `web/public/logo.png` | None |
| `grok.svg` | [SpaceXAI brand guidelines](https://x.ai/legal/brand-guidelines) | Retrieved 2026-07-25 | xAI Brand Guidelines: marks may be used to accurately refer to xAI or its services; logos must be used exactly as provided | `SpaceXAI_Grok_Assets.zip` → `Grok_Logomark_Dark.svg` | None |
+| `kiro.svg` | [AWS Kiro](https://kiro.dev) | Retrieved 2026-07-28 | Nominative use: mark identifies Kiro's harness in the runtime gallery | Kiro CLI brand asset | None |
## Inline SVG marks (`RUNTIME_MARKS`)
diff --git a/desktop/public/harness-logos/kiro.svg b/desktop/public/harness-logos/kiro.svg
new file mode 100644
index 0000000000..811b8d8335
--- /dev/null
+++ b/desktop/public/harness-logos/kiro.svg
@@ -0,0 +1,11 @@
+
diff --git a/desktop/src-tauri/src/managed_agents/discovery.rs b/desktop/src-tauri/src/managed_agents/discovery.rs
index eecbf4de3e..d0879b07b3 100644
--- a/desktop/src-tauri/src/managed_agents/discovery.rs
+++ b/desktop/src-tauri/src/managed_agents/discovery.rs
@@ -10,8 +10,10 @@ use crate::managed_agents::{
HarnessSource,
};
+mod presets;
mod runtime_metadata;
+use presets::PRESET_HARNESSES;
pub(crate) use runtime_metadata::KnownAcpRuntime;
const GOOSE_AVATAR_URL: &str = "https://goose-docs.ai/img/logo_dark.png";
@@ -1537,88 +1539,6 @@ fn preset_catalog_entry(
}
}
-const PRESET_HARNESSES: &[PresetHarness] = &[
- PresetHarness {
- id: "cursor",
- label: "Cursor",
- command: "cursor-agent",
- args: &["acp"],
- install_instructions_url: "https://cursor.com/downloads",
- install_hint: "Buzz talks to Cursor through the cursor-agent CLI's ACP mode.",
- underlying_cli: None,
- },
- PresetHarness {
- id: "omp",
- label: "Oh My Pi",
- command: "omp",
- args: &["acp"],
- install_instructions_url: "https://github.com/can1357/oh-my-pi",
- install_hint: "Buzz talks to Oh My Pi through its CLI's ACP mode (omp acp).",
- underlying_cli: None,
- },
- PresetHarness {
- id: "grok",
- label: "Grok Build",
- command: "grok",
- args: &["agent", "--always-approve", "stdio"],
- install_instructions_url: "https://build.x.ai/docs",
- install_hint: "Buzz talks to Grok Build through its CLI's agent stdio mode.",
- underlying_cli: None,
- },
- PresetHarness {
- id: "opencode",
- label: "OpenCode",
- command: "opencode",
- args: &["acp"],
- install_instructions_url: "https://opencode.ai/docs",
- install_hint: "Buzz talks to OpenCode through its CLI's ACP mode (opencode acp).",
- underlying_cli: None,
- },
- PresetHarness {
- id: "kimi",
- label: "Kimi Code",
- command: "kimi",
- args: &["acp"],
- install_instructions_url: "https://kimi.ai/download",
- install_hint: "Buzz talks to Kimi Code through its CLI's ACP mode (kimi acp).",
- underlying_cli: None,
- },
- PresetHarness {
- id: "amp",
- label: "Amp",
- command: "amp-acp",
- args: &[],
- install_instructions_url: "https://github.com/tao12345666333/amp-acp",
- install_hint: "Buzz talks to the Amp CLI through the amp-acp adapter. Follow the setup guide to install the adapter so the amp-acp command is on your PATH.",
- underlying_cli: Some("amp"),
- },
- PresetHarness {
- id: "hermes",
- label: "Hermes Agent",
- command: "hermes-acp",
- args: &[],
- install_instructions_url: "https://hermes-agent.nousresearch.com",
- install_hint: "Buzz talks to Hermes Agent through its hermes-acp command.",
- underlying_cli: None,
- },
- PresetHarness {
- id: "openclaw",
- label: "OpenClaw",
- command: "openclaw",
- args: &["acp"],
- install_instructions_url: "https://docs.openclaw.ai/start/getting-started",
- install_hint: "Buzz talks to OpenClaw through its ACP mode (openclaw acp), which relies on the OpenClaw Gateway daemon. Follow the setup guide to install both.\n\n\
- ⚠️ Execution-locus note: `openclaw acp` runs tools inside the \
- OpenClaw Gateway daemon, not in the Desktop process. \
- Desktop-injected BUZZ_* env vars are visible to the `openclaw` \
- harness process itself, but do NOT automatically reach the \
- Gateway's execution environment. If your tools or agent logic \
- needs BUZZ_* credentials at execution time, set them on the \
- Gateway's own environment separately.",
- underlying_cli: None,
- },
-];
-
/// Return the static preset harness definitions as `HarnessDefinition` values.
///
/// Used by `warm_harness_registry_from_dir` to seed the loaded-harness registry
diff --git a/desktop/src-tauri/src/managed_agents/discovery/presets.rs b/desktop/src-tauri/src/managed_agents/discovery/presets.rs
new file mode 100644
index 0000000000..3d32404d51
--- /dev/null
+++ b/desktop/src-tauri/src/managed_agents/discovery/presets.rs
@@ -0,0 +1,93 @@
+use super::PresetHarness;
+
+pub(super) const PRESET_HARNESSES: &[PresetHarness] = &[
+ PresetHarness {
+ id: "cursor",
+ label: "Cursor",
+ command: "cursor-agent",
+ args: &["acp"],
+ install_instructions_url: "https://cursor.com/downloads",
+ install_hint: "Buzz talks to Cursor through the cursor-agent CLI's ACP mode.",
+ underlying_cli: None,
+ },
+ PresetHarness {
+ id: "omp",
+ label: "Oh My Pi",
+ command: "omp",
+ args: &["acp"],
+ install_instructions_url: "https://github.com/can1357/oh-my-pi",
+ install_hint: "Buzz talks to Oh My Pi through its CLI's ACP mode (omp acp).",
+ underlying_cli: None,
+ },
+ PresetHarness {
+ id: "grok",
+ label: "Grok Build",
+ command: "grok",
+ args: &["agent", "--always-approve", "stdio"],
+ install_instructions_url: "https://build.x.ai/docs",
+ install_hint: "Buzz talks to Grok Build through its CLI's agent stdio mode.",
+ underlying_cli: None,
+ },
+ PresetHarness {
+ id: "opencode",
+ label: "OpenCode",
+ command: "opencode",
+ args: &["acp"],
+ install_instructions_url: "https://opencode.ai/docs",
+ install_hint: "Buzz talks to OpenCode through its CLI's ACP mode (opencode acp).",
+ underlying_cli: None,
+ },
+ PresetHarness {
+ id: "kimi",
+ label: "Kimi Code",
+ command: "kimi",
+ args: &["acp"],
+ install_instructions_url: "https://kimi.ai/download",
+ install_hint: "Buzz talks to Kimi Code through its CLI's ACP mode (kimi acp).",
+ underlying_cli: None,
+ },
+ PresetHarness {
+ id: "amp",
+ label: "Amp",
+ command: "amp-acp",
+ args: &[],
+ install_instructions_url: "https://github.com/tao12345666333/amp-acp",
+ install_hint: "Buzz talks to the Amp CLI through the amp-acp adapter. Follow the setup guide to install the adapter so the amp-acp command is on your PATH.",
+ underlying_cli: Some("amp"),
+ },
+ PresetHarness {
+ id: "hermes",
+ label: "Hermes Agent",
+ command: "hermes-acp",
+ args: &[],
+ install_instructions_url: "https://hermes-agent.nousresearch.com",
+ install_hint: "Buzz talks to Hermes Agent through its hermes-acp command.",
+ underlying_cli: None,
+ },
+ PresetHarness {
+ id: "openclaw",
+ label: "OpenClaw",
+ command: "openclaw",
+ args: &["acp"],
+ install_instructions_url: "https://docs.openclaw.ai/start/getting-started",
+ install_hint: "Buzz talks to OpenClaw through its ACP mode (openclaw acp), which relies on the OpenClaw Gateway daemon. Follow the setup guide to install both.\n\n\
+ ⚠️ Execution-locus note: `openclaw acp` runs tools inside the \
+ OpenClaw Gateway daemon, not in the Desktop process. \
+ Desktop-injected BUZZ_* env vars are visible to the `openclaw` \
+ harness process itself, but do NOT automatically reach the \
+ Gateway's execution environment. If your tools or agent logic \
+ needs BUZZ_* credentials at execution time, set them on the \
+ Gateway's own environment separately.",
+ underlying_cli: None,
+ },
+ PresetHarness {
+ id: "kiro",
+ label: "Kiro",
+ command: "kiro-cli",
+ args: &["acp"],
+ install_instructions_url: "https://kiro.dev/docs/getting-started/",
+ install_hint: "Buzz talks to Kiro through the Kiro CLI's ACP mode (kiro-cli acp). \
+ Install the Kiro CLI and run `kiro-cli auth login` to authenticate.",
+ underlying_cli: None,
+ },
+];
diff --git a/desktop/src/features/onboarding/ui/RuntimeIcon.tsx b/desktop/src/features/onboarding/ui/RuntimeIcon.tsx
index f9c201d115..f408f8c423 100644
--- a/desktop/src/features/onboarding/ui/RuntimeIcon.tsx
+++ b/desktop/src/features/onboarding/ui/RuntimeIcon.tsx
@@ -24,6 +24,7 @@ export const PRESET_LOGOS: Record = {
amp: "/harness-logos/amp.png",
hermes: "/harness-logos/hermes.png",
openclaw: "/harness-logos/openclaw.svg",
+ kiro: "/harness-logos/kiro.svg",
};
function isBuzzRuntime(runtime: AcpRuntimeCatalogEntry): boolean {
diff --git a/desktop/src/features/onboarding/ui/presetLogos.test.mjs b/desktop/src/features/onboarding/ui/presetLogos.test.mjs
index 0ff2193155..7a5df620da 100644
--- a/desktop/src/features/onboarding/ui/presetLogos.test.mjs
+++ b/desktop/src/features/onboarding/ui/presetLogos.test.mjs
@@ -24,15 +24,15 @@ const desktopRoot = path.resolve(
"../../../..",
);
-const discoveryRs = readFileSync(
- path.join(desktopRoot, "src-tauri/src/managed_agents/discovery.rs"),
+const presetsRs = readFileSync(
+ path.join(desktopRoot, "src-tauri/src/managed_agents/discovery/presets.rs"),
"utf8",
);
-const presetBlock = discoveryRs.match(
+const presetBlock = presetsRs.match(
/const PRESET_HARNESSES: &\[PresetHarness\] = &\[([\s\S]*?)\n\];/,
);
-assert.ok(presetBlock, "could not locate PRESET_HARNESSES in discovery.rs");
+assert.ok(presetBlock, "could not locate PRESET_HARNESSES in presets.rs");
const presetIds = [...presetBlock[1].matchAll(/^\s{8}id: "([^"]+)",$/gm)].map(
(match) => match[1],