diff --git a/AGENTS.md b/AGENTS.md
index 35a8c85..99fb384 100644
--- a/AGENTS.md
+++ b/AGENTS.md
@@ -1,7 +1,7 @@
# Agent Client Plugin - LLM Developer Guide
## Overview
-Obsidian plugin for AI agent interaction (Claude Code, Codex, Gemini CLI, Mistral Vibe, OpenCode, custom agents) via ACP.
+Obsidian plugin for AI agent interaction (Claude Code, Codex, Gemini CLI, Mistral Vibe, OpenCode, Kiro, custom agents) via ACP.
**Tech**: React 19, TypeScript, Obsidian API, Agent Client Protocol (ACP)
@@ -335,6 +335,7 @@ interface ISettingsAccess {
- Gemini CLI: `@google/gemini-cli` (GEMINI_API_KEY)
- Mistral Vibe: `mistral-vibe` (MISTRAL_API_KEY)
- OpenCode: `opencode-ai` (CLI-managed auth, no API key env)
+- Kiro: `kiro-cli` install script (KIRO_API_KEY, optional)
- Custom: Any ACP-compatible agent
---
diff --git a/README.ja.md b/README.ja.md
index 5fdee15..fddc4e2 100644
--- a/README.ja.md
+++ b/README.ja.md
@@ -16,7 +16,7 @@
-Bring AI agents (Claude Code, Codex, Gemini CLI, Mistral Vibe, OpenCode) directly into Obsidian. Chat with your AI assistant right from your vault.
+Bring AI agents (Claude Code, Codex, Gemini CLI, Mistral Vibe, OpenCode, Kiro) directly into Obsidian. Chat with your AI assistant right from your vault.
Built on [Agent Client Protocol (ACP)](https://github.com/agentclientprotocol/agent-client-protocol) by Zed.
@@ -31,7 +31,7 @@ https://github.com/user-attachments/assets/1c538349-b3fb-44dd-a163-7331cbca7824
- **Note Mentions**: Reference your notes with `@notename` syntax; the agent also sees resolved paths for `[[wikilinks]]` inside them
- **Image Attachments**: Paste or drag-and-drop images into the chat
- **Slash Commands**: Use `/` commands provided by your agent
-- **Multi-Agent Support**: Switch between Claude Code, Codex, Gemini CLI, Mistral Vibe, OpenCode, and custom agents
+- **Multi-Agent Support**: Switch between Claude Code, Codex, Gemini CLI, Mistral Vibe, OpenCode, Kiro, and custom agents
- **Multi-Session**: Run multiple agents simultaneously in separate views
- **Floating Chat**: A persistent, collapsible chat window for quick access
- **Mode & Model Switching**: Change AI models and agent modes from the chat
@@ -102,7 +102,8 @@ Open a terminal (Terminal on macOS/Linux, PowerShell on Windows) and run the fol
- [Gemini CLI](https://rait-09.github.io/obsidian-agent-client/agent-setup/gemini-cli.html)
- [Mistral Vibe](https://rait-09.github.io/obsidian-agent-client/agent-setup/mistral-vibe.html)
- [OpenCode](https://rait-09.github.io/obsidian-agent-client/agent-setup/opencode.html)
-- [Custom Agents](https://rait-09.github.io/obsidian-agent-client/agent-setup/custom-agents.html) (Qwen Code, Kiro, etc.)
+- [Kiro](https://rait-09.github.io/obsidian-agent-client/agent-setup/kiro.html)
+- [Custom Agents](https://rait-09.github.io/obsidian-agent-client/agent-setup/custom-agents.html) (Qwen Code, etc.)
**[Full Documentation](https://rait-09.github.io/obsidian-agent-client/)**
diff --git a/docs/.vitepress/config.mts b/docs/.vitepress/config.mts
index 113fbba..65eb622 100644
--- a/docs/.vitepress/config.mts
+++ b/docs/.vitepress/config.mts
@@ -61,6 +61,7 @@ export default defineConfig({
{ text: "Gemini CLI", link: "/agent-setup/gemini-cli" },
{ text: "Mistral Vibe", link: "/agent-setup/mistral-vibe" },
{ text: "OpenCode", link: "/agent-setup/opencode" },
+ { text: "Kiro", link: "/agent-setup/kiro" },
{ text: "Custom Agents", link: "/agent-setup/custom-agents" },
],
},
diff --git a/docs/agent-setup/custom-agents.md b/docs/agent-setup/custom-agents.md
index f8197fe..1333634 100644
--- a/docs/agent-setup/custom-agents.md
+++ b/docs/agent-setup/custom-agents.md
@@ -4,7 +4,7 @@ You can use any agent that implements the [Agent Client Protocol (ACP)](https://
## Install and Configure
-1. Install your ACP-compatible agent (e.g., [Qwen Code](https://github.com/QwenLM/qwen-code), [Kiro](https://kiro.dev/)).
+1. Install your ACP-compatible agent (e.g., [Qwen Code](https://github.com/QwenLM/qwen-code)).
2. Open **Settings → Agent Client** and scroll to **Custom Agents** section.
@@ -19,8 +19,8 @@ You can use any agent that implements the [Agent Client Protocol (ACP)](https://
## Configuration Examples
-::: tip OpenCode
-OpenCode is now a built-in preset — see [OpenCode Setup](./opencode). If you previously configured it here as a custom agent with the id `opencode`, your settings migrate to the preset automatically.
+::: tip OpenCode and Kiro
+OpenCode and Kiro are now built-in presets — see [OpenCode Setup](./opencode) and [Kiro Setup](./kiro). If you previously configured them here as custom agents (ids `opencode` / `kiro-cli`), your settings migrate to the presets automatically.
:::
### Qwen Code
@@ -33,16 +33,6 @@ OpenCode is now a built-in preset — see [OpenCode Setup](./opencode). If you p
| **Arguments** | `--experimental-acp` |
| **Environment variables** | (optional) |
-### Kiro
-
-| Field | Value |
-|-------|-------|
-| **Agent ID** | `kiro-cli` |
-| **Display name** | `Kiro` |
-| **Path** | `kiro-cli` |
-| **Arguments** | `acp` |
-| **Environment variables** | (optional) |
-
## Authentication
Authentication depends on the specific agent. Common patterns:
diff --git a/docs/agent-setup/index.md b/docs/agent-setup/index.md
index f0cbdb5..ad01542 100644
--- a/docs/agent-setup/index.md
+++ b/docs/agent-setup/index.md
@@ -11,13 +11,14 @@ Agent Client supports multiple AI agents through the [Agent Client Protocol (ACP
| [Gemini CLI](./gemini-cli) | Google | `@google/gemini-cli` |
| [Mistral Vibe](./mistral-vibe) | Mistral AI | `mistral-vibe` |
| [OpenCode](./opencode) | Multi-provider | `opencode-ai` |
+| [Kiro](./kiro) | AWS | install script |
| [Custom Agents](./custom-agents) | Various | Any ACP-compatible agent |
## Common Setup Steps
All agents follow a similar setup pattern:
-1. **Install the agent** — see each agent's setup page for the exact command (npm for Claude Code / Codex / Gemini CLI; `curl` on macOS/Linux or `uv` on Windows for Mistral Vibe; `curl` or npm for OpenCode)
+1. **Install the agent** — see each agent's setup page for the exact command (npm for Claude Code / Codex / Gemini CLI; `curl` on macOS/Linux or `uv` on Windows for Mistral Vibe; `curl` or npm for OpenCode; `curl` on macOS/Linux or PowerShell on Windows for Kiro)
2. **Set up authentication** (API key or account login)
The plugin resolves bare command names through your login shell's PATH, so path configuration is often not needed. If the agent is not found automatically, use `which` (macOS/Linux) or `where.exe` (Windows) to find the path and configure it in Settings → Agent Client.
diff --git a/docs/agent-setup/kiro.md b/docs/agent-setup/kiro.md
new file mode 100644
index 0000000..7e4c79d
--- /dev/null
+++ b/docs/agent-setup/kiro.md
@@ -0,0 +1,79 @@
+# Kiro Setup
+
+Kiro is AWS's agentic coding tool. This page covers the **Kiro CLI** (`kiro-cli`) — distinct from the Kiro IDE — which communicates via ACP through the `kiro-cli acp` command (available since Kiro CLI 1.25.0).
+
+## Install and Configure
+
+Open a terminal (Terminal on macOS/Linux, PowerShell on Windows) and run the following commands.
+
+1. Install the Kiro CLI:
+
+::: code-group
+
+```bash [macOS/Linux]
+curl -fsSL https://cli.kiro.dev/install | bash
+```
+
+```powershell [Windows]
+irm 'https://cli.kiro.dev/install.ps1' | iex
+```
+
+:::
+
+::: warning Windows support
+The Kiro CLI requires **Windows 11**, and the install command must run in Windows Terminal or PowerShell (not Command Prompt). Other installers (AppImage, zip, .deb) are listed in the [Kiro CLI docs](https://kiro.dev/docs/cli/installation/).
+:::
+
+2. Find the installation path:
+
+::: code-group
+
+```bash [macOS/Linux]
+which kiro-cli
+# Example output: /Users/username/.local/bin/kiro-cli
+```
+
+```cmd [Windows]
+where.exe kiro-cli
+```
+
+:::
+
+3. Open **Settings → Agent Client**. The default command (`kiro-cli`) works in many cases. If the agent is not found automatically, set the **Kiro path** to the path found above, or click **Auto-detect**.
+
+## Authentication
+
+Choose one of the following methods:
+
+### Option A: Sign In (Interactive)
+
+1. Run the login flow in your terminal:
+
+```bash
+kiro-cli login
+```
+
+2. Sign in with GitHub, Google, AWS Builder ID, or your organization's identity provider.
+
+3. In **Settings → Agent Client**, leave the **API key field empty** — the `kiro-cli acp` process started by Agent Client reuses your session.
+
+### Option B: Kiro API Key
+
+API keys are available on Kiro Pro and higher tiers:
+
+1. Generate a key at [app.kiro.dev](https://app.kiro.dev)
+2. Enter it in **Settings → Agent Client → Preset agents → Kiro → API key** (stored in Obsidian's Keychain)
+
+A signed-in session takes precedence over the API key, so setting a key never breaks an existing login.
+
+::: tip Migrating from a custom agent
+If you previously set up Kiro as a custom agent with the id `kiro-cli` (as these docs once described), your settings are migrated to the preset automatically — saved sessions keep working. If your custom agent carried `KIRO_API_KEY` in its environment variables, consider moving it to the **API key** field so it is stored in Obsidian's Keychain instead of plain text.
+:::
+
+## Verify Setup
+
+1. Click the robot icon in the ribbon or use the command palette: **"Open chat view"**
+2. Switch to Kiro from the agent dropdown in the chat header
+3. Try sending a message to verify the connection
+
+Having issues? See [Troubleshooting](/help/troubleshooting).
diff --git a/docs/agent-setup/mistral-vibe.md b/docs/agent-setup/mistral-vibe.md
index d38fab6..82b1cc6 100644
--- a/docs/agent-setup/mistral-vibe.md
+++ b/docs/agent-setup/mistral-vibe.md
@@ -65,7 +65,7 @@ vibe
If you prefer to use an API key for authentication:
1. Get your API key from the [Mistral Console](https://console.mistral.ai/)
-2. Enter the API key in **Settings → Agent Client → Mistral Vibe → API key**
+2. Enter the API key in **Settings → Agent Client → Preset agents → Mistral Vibe → API key**
::: tip If the key isn't picked up
If authentication still fails, set the key on the Vibe side instead: run `vibe --setup` in your terminal and configure your API key (it's stored in `~/.vibe/.env`). Then leave the **API key field empty** in Agent Client.
diff --git a/docs/getting-started/quick-start.md b/docs/getting-started/quick-start.md
index c1d74a5..2852d90 100644
--- a/docs/getting-started/quick-start.md
+++ b/docs/getting-started/quick-start.md
@@ -13,7 +13,8 @@ Agent Client supports multiple AI agents. Choose one to start:
| **[Gemini CLI](/agent-setup/gemini-cli)** | Google | with `--experimental-acp` option |
| **[Mistral Vibe](/agent-setup/mistral-vibe)** | Mistral AI | with built-in ACP support (`vibe-acp`) |
| **[OpenCode](/agent-setup/opencode)** | Multi-provider | with built-in ACP support (`opencode acp`) |
-| **[Custom](/agent-setup/custom-agents)** | Various | [Any ACP-compatible agent](https://agentclientprotocol.com/overview/agents) (e.g., Qwen Code, Kiro) |
+| **[Kiro](/agent-setup/kiro)** | AWS | with built-in ACP support (`kiro-cli acp`) |
+| **[Custom](/agent-setup/custom-agents)** | Various | [Any ACP-compatible agent](https://agentclientprotocol.com/overview/agents) (e.g., Qwen Code) |
## Step 2: Install and Configure the Agent
@@ -24,6 +25,7 @@ Follow the setup guide for your chosen agent:
- [Gemini CLI Setup](/agent-setup/gemini-cli)
- [Mistral Vibe Setup](/agent-setup/mistral-vibe)
- [OpenCode Setup](/agent-setup/opencode)
+- [Kiro Setup](/agent-setup/kiro)
- [Custom Agents](/agent-setup/custom-agents)
Each guide covers installation, path configuration, and authentication.
diff --git a/docs/help/faq.md b/docs/help/faq.md
index d8cd1e1..f83e09d 100644
--- a/docs/help/faq.md
+++ b/docs/help/faq.md
@@ -6,7 +6,7 @@ Frequently asked questions about Agent Client.
### What is Agent Client?
-Agent Client is an Obsidian plugin that lets you chat with AI agents directly within Obsidian. It supports Claude Code, Codex, Gemini CLI, Mistral Vibe, OpenCode, and any ACP-compatible agent. The plugin uses the [Agent Client Protocol (ACP)](https://agentclientprotocol.com/) to communicate with agents.
+Agent Client is an Obsidian plugin that lets you chat with AI agents directly within Obsidian. It supports Claude Code, Codex, Gemini CLI, Mistral Vibe, OpenCode, Kiro, and any ACP-compatible agent. The plugin uses the [Agent Client Protocol (ACP)](https://agentclientprotocol.com/) to communicate with agents.
### Is this an official Anthropic/OpenAI/Google plugin?
@@ -81,7 +81,7 @@ Disabling only hides the agent from lists: already-open chats, restored sessions
### What is a custom agent?
-Any ACP-compatible agent beyond the preset ones (Claude Code, Codex, Gemini CLI, Mistral Vibe, OpenCode). You can add custom agents in **Settings → Agent Client → Custom agents**. See [Custom Agents](/agent-setup/custom-agents).
+Any ACP-compatible agent beyond the preset ones (Claude Code, Codex, Gemini CLI, Mistral Vibe, OpenCode, Kiro). You can add custom agents in **Settings → Agent Client → Custom agents**. See [Custom Agents](/agent-setup/custom-agents).
### Do all agents support the same features?
@@ -95,7 +95,7 @@ Slash commands are provided by the agent, not the plugin. If the input placehold
### Why are the commands different from what I expected?
-Each agent provides its own commands. Claude Code, Codex, Gemini CLI, Mistral Vibe, and OpenCode all have different command sets. Refer to your agent's documentation for available commands.
+Each agent provides its own commands. Claude Code, Codex, Gemini CLI, Mistral Vibe, OpenCode, and Kiro all have different command sets. Refer to your agent's documentation for available commands.
## Permissions
diff --git a/docs/help/troubleshooting.md b/docs/help/troubleshooting.md
index 343a861..90d3a77 100644
--- a/docs/help/troubleshooting.md
+++ b/docs/help/troubleshooting.md
@@ -59,6 +59,9 @@ The agent requires authentication before processing requests.
**For OpenCode:**
- Run `opencode` in Terminal and use the `/connect` command to configure a provider (there is no API key field in the plugin). See [OpenCode Setup](/agent-setup/opencode#authentication).
+**For Kiro:**
+- Run `kiro-cli login` in Terminal first to sign in, or link an API key (Kiro Pro and higher tiers) in **Settings → Agent Client → Preset agents → Kiro → API key**. See [Kiro Setup](/agent-setup/kiro#authentication).
+
### "No Authentication Methods" error
The agent didn't provide authentication options.
diff --git a/docs/index.md b/docs/index.md
index 9b210b4..27d4922 100644
--- a/docs/index.md
+++ b/docs/index.md
@@ -53,7 +53,8 @@ Agent Client is an Obsidian plugin that brings AI coding agents directly into yo
| **[Gemini CLI](https://github.com/google-gemini/gemini-cli)** | Google | with `--experimental-acp` option |
| **[Mistral Vibe](https://github.com/mistralai/mistral-vibe)** | Mistral AI | with built-in ACP support (`vibe-acp`) |
| **[OpenCode](https://github.com/anomalyco/opencode)** | Multi-provider | with built-in ACP support (`opencode acp`) |
-| **Custom** | Various | [Any ACP-compatible agent](https://agentclientprotocol.com/overview/agents) (e.g., Qwen Code, Kiro) |
+| **[Kiro](https://kiro.dev/)** | AWS | with built-in ACP support (`kiro-cli acp`) |
+| **Custom** | Various | [Any ACP-compatible agent](https://agentclientprotocol.com/overview/agents) (e.g., Qwen Code) |
### Key Features
diff --git a/docs/reference/acp-support.md b/docs/reference/acp-support.md
index 87edbf1..c043ec9 100644
--- a/docs/reference/acp-support.md
+++ b/docs/reference/acp-support.md
@@ -6,7 +6,7 @@ This page documents which Agent Client Protocol (ACP) features are supported by
The [Agent Client Protocol (ACP)](https://agentclientprotocol.com/) is an open standard for communication between AI agents and client applications. It defines how clients send prompts, receive responses, handle permissions, and manage sessions.
-Agent Client implements ACP as a **client**, communicating with ACP-compatible agents like Claude Code, Codex, Gemini CLI, Mistral Vibe, and OpenCode.
+Agent Client implements ACP as a **client**, communicating with ACP-compatible agents like Claude Code, Codex, Gemini CLI, Mistral Vibe, OpenCode, and Kiro.
## Methods
diff --git a/docs/usage/context-files.md b/docs/usage/context-files.md
index d87e8db..7d5a1c1 100644
--- a/docs/usage/context-files.md
+++ b/docs/usage/context-files.md
@@ -21,6 +21,7 @@ Each agent uses its own context file:
| Gemini CLI | `GEMINI.md` |
| Mistral Vibe | `AGENTS.md` |
| OpenCode | `AGENTS.md` (falls back to `CLAUDE.md`) |
+| Kiro | `AGENTS.md` (also `.kiro/steering/*.md`) |
Place the context file in your **vault root** to have the agent read it automatically.
diff --git a/src/services/preset-agents.ts b/src/services/preset-agents.ts
index ba6138b..7cf279e 100644
--- a/src/services/preset-agents.ts
+++ b/src/services/preset-agents.ts
@@ -219,6 +219,27 @@ export const PRESET_AGENTS: readonly PresetAgentDefinition[] = [
},
docsPage: "opencode",
},
+ {
+ presetId: "kiro-cli",
+ defaultDisplayName: "Kiro",
+ defaultCommand: "kiro-cli",
+ defaultArgs: ["acp"],
+ absorbsCustomAgentId: "kiro-cli",
+ apiKey: {
+ envVarName: "KIRO_API_KEY",
+ settingDesc:
+ "Kiro API key (Kiro Pro and higher tiers). Required only for API-key auth — leave empty when signing in with kiro-cli login. Select from Obsidian's Keychain or create a new secret.",
+ },
+ installHint: {
+ default: "curl -fsSL https://cli.kiro.dev/install | bash",
+ nativeWindows: "irm 'https://cli.kiro.dev/install.ps1' | iex",
+ },
+ settingsCopy: {
+ pathDesc:
+ 'Command name or path to kiro-cli. Use just "kiro-cli" to let the login shell resolve it, or enter an absolute path.',
+ },
+ docsPage: "kiro",
+ },
];
/**
diff --git a/test/session-helpers.test.ts b/test/session-helpers.test.ts
index ae90198..5325f36 100644
--- a/test/session-helpers.test.ts
+++ b/test/session-helpers.test.ts
@@ -61,6 +61,9 @@ function makeSettings(
opencode: preset("opencode", "OpenCode", "opencode", {
args: ["acp"],
}),
+ "kiro-cli": preset("kiro-cli", "Kiro", "kiro-cli", {
+ args: ["acp"],
+ }),
},
customAgents: [],
defaultAgentId: "",
@@ -79,6 +82,7 @@ describe("getAvailableAgentsFromSettings", () => {
{ id: "gemini-cli", displayName: "Gemini CLI" },
{ id: "mistral-vibe", displayName: "Mistral Vibe" },
{ id: "opencode", displayName: "OpenCode" },
+ { id: "kiro-cli", displayName: "Kiro" },
{ id: "my-custom", displayName: "My Custom" },
]);
});
@@ -109,6 +113,7 @@ describe("getAvailableAgentsFromSettings", () => {
"gemini-cli",
"mistral-vibe",
"opencode",
+ "kiro-cli",
"my-custom",
]);
});
@@ -128,6 +133,7 @@ describe("getAllAgentsFromSettings", () => {
{ id: "gemini-cli", displayName: "Gemini CLI" },
{ id: "mistral-vibe", displayName: "Mistral Vibe" },
{ id: "opencode", displayName: "OpenCode" },
+ { id: "kiro-cli", displayName: "Kiro" },
{ id: "off-custom", displayName: "Off Custom" },
]);
});
@@ -239,6 +245,7 @@ describe("buildAgentConfigWithApiKey", () => {
["codex-acp", "OPENAI_API_KEY"],
["gemini-cli", "GEMINI_API_KEY"],
["mistral-vibe", "MISTRAL_API_KEY"],
+ ["kiro-cli", "KIRO_API_KEY"],
])("attaches the %s secret as %s", (agentId, envVarName) => {
const agentSettings = preset(agentId, "Name", "cmd", {
apiKeySecretId: "my-secret",
diff --git a/test/settings-normalizer.test.ts b/test/settings-normalizer.test.ts
index 0933a05..dd29ae6 100644
--- a/test/settings-normalizer.test.ts
+++ b/test/settings-normalizer.test.ts
@@ -276,6 +276,25 @@ describe("absorbCustomAgents", () => {
});
});
+ it("absorbs the docs-advised kiro-cli custom the same way", () => {
+ const kiroCustom = {
+ id: "kiro-cli",
+ displayName: "My Kiro",
+ command: "/opt/kiro-cli",
+ args: ["acp"],
+ env: [{ key: "KIRO_LOG_LEVEL", value: "debug" }],
+ };
+ const result = absorbCustomAgents(
+ { customAgents: [kiroCustom] },
+ PRESET_AGENTS,
+ );
+ expect(result.absorbed).toEqual([
+ { presetId: "kiro-cli", displayName: "Kiro" },
+ ]);
+ expect(result.customAgents).toEqual([]);
+ expect(result.presetAgents["kiro-cli"]).toBe(kiroCustom);
+ });
+
it("skips when the preset already has a stored entry", () => {
const raw = {
presetAgents: { opencode: { command: "opencode" } },