Skip to content
Merged
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
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -130,7 +130,7 @@ The tables below show whether each tool supports a given feature (✅ = supporte
### Deprecation notes

- **Google Antigravity (`antigravity-ide` / `antigravity-cli`)** — Antigravity 2.0 splits into two products with separate global config trees: the desktop **`antigravity-ide`** and the **`antigravity-cli`** (`agy`). For project-scope rules, **both `antigravity-ide` and `antigravity-cli`** emit the root rule as a plain cross-tool **`AGENTS.md`** at the project root (the Gemini-lineage discovery order is `AGENTS.md`, `CONTEXT.md`, `GEMINI.md`; the IDE has read `AGENTS.md` since v1.20.3) and non-root rules under `.agents/rules/`.
- **Kiro (`kiro`)** — Kiro's IDE and CLI use diverging config formats (IDE: Markdown subagents `.kiro/agents/*.md` and structured JSON hooks `.kiro/hooks/*.json`; CLI: JSON agent-config subagents `.kiro/agents/*.json` and hooks in `.kiro/agents/default.json`), so `kiro` is split into **`kiro-cli`** and **`kiro-ide`**. The legacy `kiro` target remains as a **deprecated alias** with its current behavior unchanged. The two targets share every surface except **subagents** (Markdown vs JSON) and **hooks**; Kiro IDE hooks are emitted as a single `.kiro/hooks/rulesync.json` (`{ "version": "v1", "hooks": [ ... ] }`) in project (`.kiro/hooks/`) and global (`~/.kiro/hooks/`) scope, while the CLI uses `.kiro/agents/default.json`. Global skills (`~/.kiro/skills/`) and global Kiro IDE subagents (`~/.kiro/agents/`) are supported too.
- **Kiro (`kiro`)** — Kiro's IDE and CLI use diverging config formats (IDE: Markdown subagents `.kiro/agents/*.md` and structured JSON hooks `.kiro/hooks/*.json`; CLI: JSON agent-config subagents `.kiro/agents/*.json` and hooks in `.kiro/agents/default.json`), so `kiro` is split into **`kiro-cli`** and **`kiro-ide`**. The legacy `kiro` target remains as a **deprecated alias** with its current behavior unchanged. The two targets share every surface except **subagents** (Markdown vs JSON) and **hooks**; Kiro IDE hooks are emitted as a single `.kiro/hooks/rulesync.json` (`{ "version": "v1", "hooks": [ ... ] }`) in project (`.kiro/hooks/`) and global (`~/.kiro/hooks/`) scope, while the CLI uses `.kiro/agents/default.json`. Global skills (`~/.kiro/skills/`) and global Kiro IDE subagents (`~/.kiro/agents/`) are supported too, as are global Kiro CLI commands (`~/.kiro/prompts/`) and subagents (`~/.kiro/agents/`).

Some features accept per-feature options (e.g., Claude Code's `ignore` feature supports `fileMode: "local"` to write to `settings.local.json` instead of `settings.json`). See [Configuration > Per-feature options](https://dyoshikawa.github.io/rulesync/guide/configuration#per-feature-options) for details.

Expand Down
4 changes: 2 additions & 2 deletions docs/reference/supported-tools.md
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ Rulesync supports both **generation** and **import** for All of the major AI cod
| Qwen Code | qwencode | ✅ 🌏 | ✅ | ✅ 🌏 🔧 | ✅ 🌏 | ✅ 🌏 | ✅ 🌏 | ✅ 🌏 | ✅ 🌏 |
| Reasonix | reasonix | | | ✅ 🌏 | ✅ 🌏 | | | ✅ 🌏 | ✅ 🌏 |
| Kiro ⚠️ | kiro | ✅ 🌏 | ✅ | ✅ 🌏 | ✅ | ✅ | ✅ | ✅ | ✅ |
| Kiro CLI | kiro-cli | ✅ 🌏 | ✅ | ✅ 🌏 | | | ✅ 🌏 | ✅ | ✅ |
| Kiro CLI | kiro-cli | ✅ 🌏 | ✅ | ✅ 🌏 | ✅ 🌏 | ✅ 🌏 | ✅ 🌏 | ✅ | ✅ |
| Kiro IDE | kiro-ide | ✅ 🌏 | ✅ | ✅ 🌏 | ✅ | ✅ 🌏 | ✅ 🌏 | ✅ 🌏 | ✅ |
| Google Antigravity IDE | antigravity-ide | ✅ 🌏 | | ✅ 🌏 🔧 | ✅ 🌏 | | ✅ 🌏 | ✅ 🌏 | ✅ |
| Google Antigravity CLI | antigravity-cli | ✅ 🌏 | ✅ | ✅ 🌏 🔧 | ✅ 🌏 | | ✅ 🌏 | ✅ 🌏 | 🌏 |
Expand All @@ -53,4 +53,4 @@ Rulesync supports both **generation** and **import** for All of the major AI cod
## Deprecation notes

- **Google Antigravity (`antigravity-ide` / `antigravity-cli`)** — Antigravity 2.0 splits into two products: the desktop **`antigravity-ide`** and the **`antigravity-cli`** (`agy`). As of Antigravity 2.0 the IDE reads its global MCP config and skills from the shared `~/.gemini/config/` tree — `~/.gemini/config/mcp_config.json` and `~/.gemini/config/skills/`, matching the current [MCP](https://antigravity.google/docs/mcp) and [Skills](https://antigravity.google/docs/skills) docs. The `antigravity-cli` global MCP config also lives in the shared `~/.gemini/config/mcp_config.json`, while the CLI keeps its own global skills tree at `~/.gemini/antigravity-cli/skills/`. Both targets also intentionally **share** the global rule file `~/.gemini/GEMINI.md` and the global hooks file `~/.gemini/config/hooks.json` — enabling both targets in `--global` mode writes those shared files once. For project-scope rules, **both `antigravity-ide` and `antigravity-cli`** emit the root rule as a plain cross-tool **`AGENTS.md`** at the project root (the Gemini-lineage discovery order is `AGENTS.md`, `CONTEXT.md`, `GEMINI.md`; the IDE has read `AGENTS.md` since v1.20.3) and non-root rules under `.agents/rules/` (the IDE adds trigger frontmatter to non-root rules; the CLI keeps them as plain markdown). For **commands (workflows)**, both targets share the project `.agents/workflows/` directory (invoked as `/workflow-name`); in `--global` mode the IDE writes to `~/.gemini/antigravity/global_workflows/` while the CLI keeps its own `~/.gemini/antigravity-cli/global_workflows/` tree (mirroring the CLI's global skills tree).
- **Kiro (`kiro`)** — Kiro ships as two products with diverging config formats: the **Kiro IDE** reads Markdown subagents (`.kiro/agents/*.md`) and structured JSON hooks (`.kiro/hooks/*.json`, format `{ "version": "v1", "hooks": [ ... ] }`), while the **Kiro CLI** reads JSON agent-config subagents (`.kiro/agents/*.json`) and agent hooks in `.kiro/agents/default.json`. A single target cannot emit both faithfully, so `kiro` is split into **`kiro-cli`** and **`kiro-ide`**. The legacy `kiro` target is kept as a **deprecated alias** (its current mixed output is unchanged for backward compatibility). Shared surfaces (steering rules with `inclusion`, `.kiro/settings/mcp.json`, `.kiro/prompts/` commands, `.kiro/skills/`, `.kiroignore`, permissions) are identical between the two; they differ in **subagents** (`.md` vs `.json`) and **hooks**. Kiro IDE **hooks** are emitted as a single `.kiro/hooks/rulesync.json` (whose `hooks` array holds every generated hook) in both project (`.kiro/hooks/`) and global (`~/.kiro/hooks/`) scope, mapping canonical lifecycle events to the IDE's PascalCase triggers (`SessionStart`, `UserPromptSubmit`, `PreToolUse`, `PostToolUse`, `Stop`) and supporting both `agent` (prompt) and `command` actions; the Kiro CLI continues to emit agent hooks in `.kiro/agents/default.json`. Global **skills** (`~/.kiro/skills/`) and global Kiro IDE **subagents** (`~/.kiro/agents/`) are also supported.
- **Kiro (`kiro`)** — Kiro ships as two products with diverging config formats: the **Kiro IDE** reads Markdown subagents (`.kiro/agents/*.md`) and structured JSON hooks (`.kiro/hooks/*.json`, format `{ "version": "v1", "hooks": [ ... ] }`), while the **Kiro CLI** reads JSON agent-config subagents (`.kiro/agents/*.json`) and agent hooks in `.kiro/agents/default.json`. A single target cannot emit both faithfully, so `kiro` is split into **`kiro-cli`** and **`kiro-ide`**. The legacy `kiro` target is kept as a **deprecated alias** (its current mixed output is unchanged for backward compatibility). Shared surfaces (steering rules with `inclusion`, `.kiro/settings/mcp.json`, `.kiro/prompts/` commands, `.kiro/skills/`, `.kiroignore`, permissions) are identical between the two; they differ in **subagents** (`.md` vs `.json`) and **hooks**. Kiro IDE **hooks** are emitted as a single `.kiro/hooks/rulesync.json` (whose `hooks` array holds every generated hook) in both project (`.kiro/hooks/`) and global (`~/.kiro/hooks/`) scope, mapping canonical lifecycle events to the IDE's PascalCase triggers (`SessionStart`, `UserPromptSubmit`, `PreToolUse`, `PostToolUse`, `Stop`) and supporting both `agent` (prompt) and `command` actions; the Kiro CLI continues to emit agent hooks in `.kiro/agents/default.json`. Global **skills** (`~/.kiro/skills/`) and global Kiro IDE **subagents** (`~/.kiro/agents/`) are also supported, as are global Kiro CLI **commands** (`~/.kiro/prompts/`) and **subagents** (`~/.kiro/agents/`).
4 changes: 2 additions & 2 deletions skills/rulesync/supported-tools.md
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ Rulesync supports both **generation** and **import** for All of the major AI cod
| Qwen Code | qwencode | ✅ 🌏 | ✅ | ✅ 🌏 🔧 | ✅ 🌏 | ✅ 🌏 | ✅ 🌏 | ✅ 🌏 | ✅ 🌏 |
| Reasonix | reasonix | | | ✅ 🌏 | ✅ 🌏 | | | ✅ 🌏 | ✅ 🌏 |
| Kiro ⚠️ | kiro | ✅ 🌏 | ✅ | ✅ 🌏 | ✅ | ✅ | ✅ | ✅ | ✅ |
| Kiro CLI | kiro-cli | ✅ 🌏 | ✅ | ✅ 🌏 | | | ✅ 🌏 | ✅ | ✅ |
| Kiro CLI | kiro-cli | ✅ 🌏 | ✅ | ✅ 🌏 | ✅ 🌏 | ✅ 🌏 | ✅ 🌏 | ✅ | ✅ |
| Kiro IDE | kiro-ide | ✅ 🌏 | ✅ | ✅ 🌏 | ✅ | ✅ 🌏 | ✅ 🌏 | ✅ 🌏 | ✅ |
| Google Antigravity IDE | antigravity-ide | ✅ 🌏 | | ✅ 🌏 🔧 | ✅ 🌏 | | ✅ 🌏 | ✅ 🌏 | ✅ |
| Google Antigravity CLI | antigravity-cli | ✅ 🌏 | ✅ | ✅ 🌏 🔧 | ✅ 🌏 | | ✅ 🌏 | ✅ 🌏 | 🌏 |
Expand All @@ -53,4 +53,4 @@ Rulesync supports both **generation** and **import** for All of the major AI cod
## Deprecation notes

- **Google Antigravity (`antigravity-ide` / `antigravity-cli`)** — Antigravity 2.0 splits into two products: the desktop **`antigravity-ide`** and the **`antigravity-cli`** (`agy`). As of Antigravity 2.0 the IDE reads its global MCP config and skills from the shared `~/.gemini/config/` tree — `~/.gemini/config/mcp_config.json` and `~/.gemini/config/skills/`, matching the current [MCP](https://antigravity.google/docs/mcp) and [Skills](https://antigravity.google/docs/skills) docs. The `antigravity-cli` global MCP config also lives in the shared `~/.gemini/config/mcp_config.json`, while the CLI keeps its own global skills tree at `~/.gemini/antigravity-cli/skills/`. Both targets also intentionally **share** the global rule file `~/.gemini/GEMINI.md` and the global hooks file `~/.gemini/config/hooks.json` — enabling both targets in `--global` mode writes those shared files once. For project-scope rules, **both `antigravity-ide` and `antigravity-cli`** emit the root rule as a plain cross-tool **`AGENTS.md`** at the project root (the Gemini-lineage discovery order is `AGENTS.md`, `CONTEXT.md`, `GEMINI.md`; the IDE has read `AGENTS.md` since v1.20.3) and non-root rules under `.agents/rules/` (the IDE adds trigger frontmatter to non-root rules; the CLI keeps them as plain markdown). For **commands (workflows)**, both targets share the project `.agents/workflows/` directory (invoked as `/workflow-name`); in `--global` mode the IDE writes to `~/.gemini/antigravity/global_workflows/` while the CLI keeps its own `~/.gemini/antigravity-cli/global_workflows/` tree (mirroring the CLI's global skills tree).
- **Kiro (`kiro`)** — Kiro ships as two products with diverging config formats: the **Kiro IDE** reads Markdown subagents (`.kiro/agents/*.md`) and structured JSON hooks (`.kiro/hooks/*.json`, format `{ "version": "v1", "hooks": [ ... ] }`), while the **Kiro CLI** reads JSON agent-config subagents (`.kiro/agents/*.json`) and agent hooks in `.kiro/agents/default.json`. A single target cannot emit both faithfully, so `kiro` is split into **`kiro-cli`** and **`kiro-ide`**. The legacy `kiro` target is kept as a **deprecated alias** (its current mixed output is unchanged for backward compatibility). Shared surfaces (steering rules with `inclusion`, `.kiro/settings/mcp.json`, `.kiro/prompts/` commands, `.kiro/skills/`, `.kiroignore`, permissions) are identical between the two; they differ in **subagents** (`.md` vs `.json`) and **hooks**. Kiro IDE **hooks** are emitted as a single `.kiro/hooks/rulesync.json` (whose `hooks` array holds every generated hook) in both project (`.kiro/hooks/`) and global (`~/.kiro/hooks/`) scope, mapping canonical lifecycle events to the IDE's PascalCase triggers (`SessionStart`, `UserPromptSubmit`, `PreToolUse`, `PostToolUse`, `Stop`) and supporting both `agent` (prompt) and `command` actions; the Kiro CLI continues to emit agent hooks in `.kiro/agents/default.json`. Global **skills** (`~/.kiro/skills/`) and global Kiro IDE **subagents** (`~/.kiro/agents/`) are also supported.
- **Kiro (`kiro`)** — Kiro ships as two products with diverging config formats: the **Kiro IDE** reads Markdown subagents (`.kiro/agents/*.md`) and structured JSON hooks (`.kiro/hooks/*.json`, format `{ "version": "v1", "hooks": [ ... ] }`), while the **Kiro CLI** reads JSON agent-config subagents (`.kiro/agents/*.json`) and agent hooks in `.kiro/agents/default.json`. A single target cannot emit both faithfully, so `kiro` is split into **`kiro-cli`** and **`kiro-ide`**. The legacy `kiro` target is kept as a **deprecated alias** (its current mixed output is unchanged for backward compatibility). Shared surfaces (steering rules with `inclusion`, `.kiro/settings/mcp.json`, `.kiro/prompts/` commands, `.kiro/skills/`, `.kiroignore`, permissions) are identical between the two; they differ in **subagents** (`.md` vs `.json`) and **hooks**. Kiro IDE **hooks** are emitted as a single `.kiro/hooks/rulesync.json` (whose `hooks` array holds every generated hook) in both project (`.kiro/hooks/`) and global (`~/.kiro/hooks/`) scope, mapping canonical lifecycle events to the IDE's PascalCase triggers (`SessionStart`, `UserPromptSubmit`, `PreToolUse`, `PostToolUse`, `Stop`) and supporting both `agent` (prompt) and `command` actions; the Kiro CLI continues to emit agent hooks in `.kiro/agents/default.json`. Global **skills** (`~/.kiro/skills/`) and global Kiro IDE **subagents** (`~/.kiro/agents/`) are also supported, as are global Kiro CLI **commands** (`~/.kiro/prompts/`) and **subagents** (`~/.kiro/agents/`).
1 change: 1 addition & 0 deletions src/e2e/e2e-commands.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -191,6 +191,7 @@ describe("E2E: commands (global mode)", () => {
{ target: "cline", outputPath: join("Documents", "Cline", "Workflows", "review-pr.md") },
{ target: "kilo", outputPath: join(".config", "kilo", "commands", "review-pr.md") },
{ target: "junie", outputPath: join(".junie", "commands", "review-pr.md") },
{ target: "kiro-cli", outputPath: join(".kiro", "prompts", "review-pr.md") },
{
target: "antigravity-ide",
outputPath: join(".gemini", "antigravity", "global_workflows", "review-pr.md"),
Expand Down
1 change: 1 addition & 0 deletions src/e2e/e2e-subagents.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -445,6 +445,7 @@ describe("E2E: subagents (global mode)", () => {
{ target: "grokcli", outputPath: join(".grok", "agents", "planner.md") },
{ target: "qwencode", outputPath: join(".qwen", "agents", "planner.md") },
{ target: "junie", outputPath: join(".junie", "agents", "planner.md") },
{ target: "kiro-cli", outputPath: join(".kiro", "agents", "planner.json") },
{ target: "opencode", outputPath: join(".config", "opencode", "agents", "planner.md") },
{ target: "rovodev", outputPath: join(".rovodev", "subagents", "planner.md") },
{ target: "takt", outputPath: join(".takt", "facets", "personas", "planner.md") },
Expand Down
1 change: 1 addition & 0 deletions src/features/commands/commands-processor.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -1138,6 +1138,7 @@ describe("CommandsProcessor", () => {
"hermesagent",
"junie",
"kilo",
"kiro-cli",
"opencode",
"pi",
"qwencode",
Expand Down
5 changes: 4 additions & 1 deletion src/features/commands/commands-processor.ts
Original file line number Diff line number Diff line change
Expand Up @@ -313,13 +313,16 @@ export const toolCommandFactories = new Map<CommandsProcessorToolTarget, ToolCom
},
],
[
// Kiro CLI reads user-wide prompts from `~/.kiro/prompts/` in addition to
// the project-scope `.kiro/prompts/` (local takes precedence over global).
// https://kiro.dev/docs/cli/chat/manage-prompts/
"kiro-cli",
{
class: KiroCliCommand,
meta: {
extension: "md",
supportsProject: true,
supportsGlobal: false,
supportsGlobal: true,
isSimulated: false,
supportsSubdirectory: false,
},
Expand Down
5 changes: 5 additions & 0 deletions src/features/commands/kiro-command.ts
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,11 @@ import {
} from "./tool-command.js";

export class KiroCommand extends ToolCommand {
// Kiro reads prompts from `.kiro/prompts/` (workspace) and, for the Kiro
// CLI, also from `~/.kiro/prompts/` (global, local takes precedence). Both
// scopes share the same relative path; the home-directory root is applied
// by the generate pipeline in global mode.
// https://kiro.dev/docs/cli/chat/manage-prompts/
static getSettablePaths(_options: { global?: boolean } = {}): ToolCommandSettablePaths {
return {
relativeDirPath: KIRO_PROMPTS_DIR_PATH,
Expand Down
5 changes: 5 additions & 0 deletions src/features/subagents/kiro-subagent.ts
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,11 @@ export class KiroSubagent extends ToolSubagent {
this.body = body;
}

// Kiro reads agent configs from `.kiro/agents/` (workspace) and, for the
// Kiro CLI, also from `~/.kiro/agents/` (global, local takes precedence).
// Both scopes share the same relative path; the home-directory root is
// applied by the generate pipeline in global mode.
// https://kiro.dev/docs/cli/custom-agents/configuration-reference/
static getSettablePaths(_options: { global?: boolean } = {}): ToolSubagentSettablePaths {
return {
relativeDirPath: KIRO_AGENTS_DIR_PATH,
Expand Down
1 change: 1 addition & 0 deletions src/features/subagents/subagents-processor.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -1039,6 +1039,7 @@ Second global content`;
"hermesagent",
"grokcli",
"junie",
"kiro-cli",
"kiro-ide",
"kilo",
"opencode",
Expand Down
5 changes: 4 additions & 1 deletion src/features/subagents/subagents-processor.ts
Original file line number Diff line number Diff line change
Expand Up @@ -263,10 +263,13 @@ export const toolSubagentFactories = new Map<SubagentsProcessorToolTarget, ToolS
},
],
[
// Kiro CLI loads agent configs from both `.kiro/agents/` (workspace) and
// `~/.kiro/agents/` (global); local agents take precedence over global
// ones with the same name. https://kiro.dev/docs/cli/custom-agents/configuration-reference/
"kiro-cli",
{
class: KiroCliSubagent,
meta: { supportsSimulated: false, supportsGlobal: false, filePattern: "*.json" },
meta: { supportsSimulated: false, supportsGlobal: true, filePattern: "*.json" },
},
],
[
Expand Down
Loading