claudekit-cli 4.4.0-dev.12 → 4.4.0-dev.13

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/cli-manifest.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
- "version": "4.4.0-dev.12",
3
- "generatedAt": "2026-06-11T04:39:39.820Z",
2
+ "version": "4.4.0-dev.13",
3
+ "generatedAt": "2026-06-15T16:33:44.921Z",
4
4
  "commands": {
5
5
  "agents": {
6
6
  "name": "agents",
@@ -1342,7 +1342,7 @@
1342
1342
  "sections": [
1343
1343
  {
1344
1344
  "title": "Gotchas",
1345
- "content": " --install and --reconcile are mutually exclusive — pass only one\n --reinstall-empty-dirs and --respect-deletions are mutually exclusive — pass only one\n Default mode is smart-detected: no/stale registry → install, valid registry → reconcile\n --respect-deletions disables the auto-reinstall heuristic for empty directories\n --force overrides skip decisions per item; --reinstall-empty-dirs is a per-directory heuristic\n Codex commands migrate as skills: project scope writes .agents/skills, global scope writes ~/.agents/skills"
1345
+ "content": " --install and --reconcile are mutually exclusive — pass only one\n --reinstall-empty-dirs and --respect-deletions are mutually exclusive — pass only one\n Default mode is smart-detected: no/stale registry → install, valid registry → reconcile\n --respect-deletions disables the auto-reinstall heuristic for empty directories\n --force overrides skip decisions per item; --reinstall-empty-dirs is a per-directory heuristic\n Codex commands migrate as skills: project scope writes .agents/skills, global scope writes ~/.agents/skills\n Kiro agents migrate as custom subagents; rules/config migrate as steering files; skills copy to .kiro/skills; commands/hooks are skipped"
1346
1346
  }
1347
1347
  ]
1348
1348
  },
@@ -1867,7 +1867,7 @@
1867
1867
  },
1868
1868
  {
1869
1869
  "flags": "-a, --agent <agent>",
1870
- "description": "Target agent(s) - can be specified multiple times. Valid: claude-code, cursor, codex, opencode, goose, gemini-cli, antigravity, github-copilot, amp, kilo, roo, windsurf, cline, openhands"
1870
+ "description": "Target agent(s) - can be specified multiple times. Valid: claude-code, cursor, codex, opencode, goose, gemini-cli, antigravity, github-copilot, amp, kilo, kiro, roo, windsurf, cline, openhands"
1871
1871
  },
1872
1872
  {
1873
1873
  "flags": "-g, --global",
@@ -1925,7 +1925,7 @@
1925
1925
  "sections": [
1926
1926
  {
1927
1927
  "title": "Supported Agents",
1928
- "content": " claude-code Claude Code CLI\n cursor Cursor IDE\n codex Codex CLI\n opencode OpenCode\n goose Goose AI\n gemini-cli Gemini CLI\n antigravity Antigravity Agent\n github-copilot GitHub Copilot\n amp Amp\n kilo Kilo Code\n roo Roo Code\n windsurf Windsurf IDE\n cline Cline\n openhands OpenHands"
1928
+ "content": " claude-code Claude Code CLI\n cursor Cursor IDE\n codex Codex CLI\n opencode OpenCode\n goose Goose AI\n gemini-cli Gemini CLI\n antigravity Antigravity Agent\n github-copilot GitHub Copilot\n amp Amp\n kilo Kilo Code\n kiro Kiro\n roo Roo Code\n windsurf Windsurf IDE\n cline Cline\n openhands OpenHands"
1929
1929
  },
1930
1930
  {
1931
1931
  "title": "Notes",
package/dist/index.js CHANGED
@@ -10774,6 +10774,9 @@ var init_hook_migration_compatibility = __esm(() => {
10774
10774
  // src/commands/portable/converters/direct-copy.ts
10775
10775
  import { readFileSync } from "node:fs";
10776
10776
  import { extname } from "node:path";
10777
+ function rewriteKiroPaths(content) {
10778
+ return content.replace(/\.claude\/skills\//g, ".kiro/skills/").replace(/\.claude\/agents\//g, ".kiro/agents/").replace(/\.claude\/rules\//g, ".kiro/steering/").replace(/\.claude\/commands\//g, "Claude Code commands/").replace(/\.claude\/hooks\//g, "Claude Code hooks/");
10779
+ }
10777
10780
  function convertDirectCopy(item, provider) {
10778
10781
  let content;
10779
10782
  try {
@@ -10786,9 +10789,13 @@ function convertDirectCopy(item, provider) {
10786
10789
  }
10787
10790
  }
10788
10791
  if (provider && provider !== "claude-code") {
10789
- const targetDir = PROVIDER_CONFIG_DIR[provider];
10790
- if (targetDir) {
10791
- content = content.replace(/\.claude\//g, targetDir);
10792
+ if (provider === "kiro") {
10793
+ content = rewriteKiroPaths(content);
10794
+ } else {
10795
+ const targetDir = PROVIDER_CONFIG_DIR[provider];
10796
+ if (targetDir) {
10797
+ content = content.replace(/\.claude\//g, targetDir);
10798
+ }
10792
10799
  }
10793
10800
  }
10794
10801
  if (provider === "codex" && item.type === "hooks") {
@@ -11380,44 +11387,48 @@ var init_provider_registry = __esm(() => {
11380
11387
  kiro: {
11381
11388
  name: "kiro",
11382
11389
  displayName: "Kiro IDE",
11383
- subagents: "none",
11390
+ subagents: "full",
11384
11391
  agents: {
11385
- projectPath: ".kiro/steering",
11386
- globalPath: null,
11387
- format: "md-to-kiro-steering",
11392
+ projectPath: ".kiro/agents",
11393
+ globalPath: join(home, ".kiro/agents"),
11394
+ format: "fm-to-fm",
11388
11395
  writeStrategy: "per-file",
11389
11396
  fileExtension: ".md"
11390
11397
  },
11391
11398
  commands: null,
11392
11399
  skills: {
11393
11400
  projectPath: ".kiro/skills",
11394
- globalPath: null,
11401
+ globalPath: join(home, ".kiro/skills"),
11395
11402
  format: "direct-copy",
11396
11403
  writeStrategy: "per-file",
11397
11404
  fileExtension: ".md"
11398
11405
  },
11399
11406
  config: {
11400
11407
  projectPath: ".kiro/steering/project.md",
11401
- globalPath: null,
11408
+ globalPath: join(home, ".kiro/steering/project.md"),
11402
11409
  format: "md-to-kiro-steering",
11403
11410
  writeStrategy: "single-file",
11404
11411
  fileExtension: ".md"
11405
11412
  },
11406
11413
  rules: {
11407
11414
  projectPath: ".kiro/steering",
11408
- globalPath: null,
11415
+ globalPath: join(home, ".kiro/steering"),
11409
11416
  format: "md-to-kiro-steering",
11410
11417
  writeStrategy: "per-file",
11411
11418
  fileExtension: ".md"
11412
11419
  },
11413
11420
  hooks: null,
11414
11421
  settingsJsonPath: null,
11415
- detect: async () => hasAnyInstallSignal([
11422
+ detect: async () => hasBinaryInPath("kiro") || hasAnyInstallSignal([
11416
11423
  join(cwd, ".kiro/steering"),
11417
11424
  join(cwd, ".kiro/skills"),
11418
11425
  join(cwd, ".kiro/hooks"),
11419
11426
  join(cwd, ".kiro/agents"),
11420
- join(cwd, ".kiro/settings/mcp.json")
11427
+ join(cwd, ".kiro/settings/mcp.json"),
11428
+ join(home, ".kiro/steering"),
11429
+ join(home, ".kiro/skills"),
11430
+ join(home, ".kiro/agents"),
11431
+ join(home, ".kiro/settings/mcp.json")
11421
11432
  ])
11422
11433
  },
11423
11434
  windsurf: {
@@ -12167,6 +12178,68 @@ ${item.body}
12167
12178
  warnings: []
12168
12179
  };
12169
12180
  }
12181
+ function mapKiroTools(toolsStr) {
12182
+ const warnings = [];
12183
+ if (!toolsStr || toolsStr.trim().length === 0) {
12184
+ return {
12185
+ tools: ["@builtin"],
12186
+ warnings: ["No Claude tools declared; granting Kiro built-in tools by default"]
12187
+ };
12188
+ }
12189
+ const tools = new Set;
12190
+ const unmapped = [];
12191
+ for (const rawTool of toolsStr.split(",")) {
12192
+ const tool = rawTool.trim();
12193
+ if (!tool)
12194
+ continue;
12195
+ const mapped = KIRO_TOOL_MAP[tool];
12196
+ if (mapped) {
12197
+ tools.add(mapped);
12198
+ continue;
12199
+ }
12200
+ const mcpMatch = /^mcp__(.+?)__(.+)$/.exec(tool);
12201
+ if (mcpMatch) {
12202
+ tools.add(`@${mcpMatch[1]}/${mcpMatch[2]}`);
12203
+ continue;
12204
+ }
12205
+ unmapped.push(tool);
12206
+ }
12207
+ if (unmapped.length > 0) {
12208
+ warnings.push(`Claude tools not mapped to Kiro custom subagent tools: ${unmapped.join(", ")}`);
12209
+ }
12210
+ if (tools.size === 0) {
12211
+ tools.add("@builtin");
12212
+ warnings.push("No mapped Kiro tools remained; granting Kiro built-in tools by default");
12213
+ }
12214
+ return { tools: Array.from(tools), warnings };
12215
+ }
12216
+ function pushYamlString(lines, key, value) {
12217
+ if (typeof value === "string" && value.trim().length > 0) {
12218
+ lines.push(`${key}: ${JSON.stringify(value.trim())}`);
12219
+ }
12220
+ }
12221
+ function convertKiroAgent(item) {
12222
+ const mappedTools = mapKiroTools(item.frontmatter.tools);
12223
+ const stripped = stripClaudeRefs(item.body, { provider: "kiro" });
12224
+ const warnings = [...mappedTools.warnings, ...stripped.warnings];
12225
+ const name = item.name;
12226
+ const description = item.description || `Custom subagent: ${name}`;
12227
+ const fmLines = ["---"];
12228
+ pushYamlString(fmLines, "name", name);
12229
+ pushYamlString(fmLines, "description", description);
12230
+ fmLines.push(`tools: ${JSON.stringify(mappedTools.tools)}`);
12231
+ pushYamlString(fmLines, "model", typeof item.frontmatter.model === "string" ? item.frontmatter.model : "");
12232
+ fmLines.push("---");
12233
+ return {
12234
+ content: `${fmLines.join(`
12235
+ `)}
12236
+
12237
+ ${stripped.content}
12238
+ `,
12239
+ filename: `${item.name}.md`,
12240
+ warnings
12241
+ };
12242
+ }
12170
12243
  function replaceClaudePathsForOpenCode(content) {
12171
12244
  return content.replace(/\.claude\//g, ".opencode/");
12172
12245
  }
@@ -12241,6 +12314,8 @@ function convertFmToFm(item, provider) {
12241
12314
  return convertForCopilot(item);
12242
12315
  case "cursor":
12243
12316
  return convertForCursor(item);
12317
+ case "kiro":
12318
+ return convertKiroAgent(item);
12244
12319
  case "opencode":
12245
12320
  if (item.type === "command")
12246
12321
  return convertOpenCodeCommand(item);
@@ -12253,8 +12328,9 @@ function convertFmToFm(item, provider) {
12253
12328
  };
12254
12329
  }
12255
12330
  }
12256
- var COPILOT_TOOL_MAP, OPENCODE_TOOL_MAP;
12331
+ var COPILOT_TOOL_MAP, KIRO_TOOL_MAP, OPENCODE_TOOL_MAP;
12257
12332
  var init_fm_to_fm = __esm(() => {
12333
+ init_md_strip();
12258
12334
  COPILOT_TOOL_MAP = {
12259
12335
  Read: "read",
12260
12336
  Glob: "search",
@@ -12266,6 +12342,19 @@ var init_fm_to_fm = __esm(() => {
12266
12342
  WebFetch: "fetch",
12267
12343
  WebSearch: "fetch"
12268
12344
  };
12345
+ KIRO_TOOL_MAP = {
12346
+ Read: "read",
12347
+ Glob: "read",
12348
+ Grep: "read",
12349
+ LS: "read",
12350
+ Edit: "write",
12351
+ Write: "write",
12352
+ MultiEdit: "write",
12353
+ NotebookEdit: "write",
12354
+ Bash: "shell",
12355
+ WebFetch: "web",
12356
+ WebSearch: "web"
12357
+ };
12269
12358
  OPENCODE_TOOL_MAP = {
12270
12359
  Read: "read",
12271
12360
  Glob: "glob",
@@ -12419,48 +12508,37 @@ function detectLanguageGlob(itemName) {
12419
12508
  function determineInclusionMode(item) {
12420
12509
  const languageGlob = detectLanguageGlob(item.name);
12421
12510
  if (languageGlob) {
12422
- return { mode: "fileMatch", fileMatch: languageGlob };
12511
+ return { mode: "fileMatch", fileMatchPattern: languageGlob };
12423
12512
  }
12424
12513
  const fmDescription = String(item.frontmatter.description || "").toLowerCase();
12425
12514
  const sortedLangs = Object.keys(LANGUAGE_GLOB_MAP).sort((a3, b3) => b3.length - a3.length);
12426
12515
  for (const lang of sortedLangs) {
12427
12516
  if (fmDescription.includes(` ${lang} `) || fmDescription.startsWith(`${lang} `) || fmDescription.endsWith(` ${lang}`)) {
12428
- return { mode: "fileMatch", fileMatch: LANGUAGE_GLOB_MAP[lang] };
12517
+ return { mode: "fileMatch", fileMatchPattern: LANGUAGE_GLOB_MAP[lang] };
12429
12518
  }
12430
12519
  }
12431
12520
  return { mode: "always" };
12432
12521
  }
12433
- function buildSteeringFrontmatter(mode, fileMatch) {
12522
+ function buildSteeringFrontmatter(mode, fileMatchPattern) {
12434
12523
  const lines = ["---"];
12435
12524
  lines.push(`inclusion: ${mode}`);
12436
- if (mode === "fileMatch" && fileMatch) {
12437
- lines.push(`fileMatch: "${fileMatch}"`);
12525
+ if (mode === "fileMatch" && fileMatchPattern) {
12526
+ lines.push(`fileMatchPattern: "${fileMatchPattern}"`);
12438
12527
  }
12439
12528
  lines.push("---");
12440
12529
  return lines.join(`
12441
12530
  `);
12442
12531
  }
12443
- function checkUnsupportedFields(item) {
12444
- const warnings = [];
12445
- const presentFields = UNSUPPORTED_AGENT_FIELDS.filter((field) => item.frontmatter[field] !== undefined);
12446
- if (presentFields.length > 0) {
12447
- warnings.push(`Agent metadata not supported by Kiro (dropped): ${presentFields.join(", ")}`);
12448
- }
12449
- return warnings;
12450
- }
12451
12532
  function bodyStartsWithHeading(body) {
12452
12533
  const trimmed = body.trimStart();
12453
12534
  return /^#{1,6}\s+/.test(trimmed);
12454
12535
  }
12455
12536
  function convertMdToKiroSteering(item, provider) {
12456
12537
  const warnings = [];
12457
- if (item.type === "agent") {
12458
- warnings.push(...checkUnsupportedFields(item));
12459
- }
12460
12538
  const stripped = stripClaudeRefs(item.body, { provider });
12461
12539
  warnings.push(...stripped.warnings);
12462
- const { mode, fileMatch } = determineInclusionMode(item);
12463
- const frontmatter = buildSteeringFrontmatter(mode, fileMatch);
12540
+ const { mode, fileMatchPattern } = determineInclusionMode(item);
12541
+ const frontmatter = buildSteeringFrontmatter(mode, fileMatchPattern);
12464
12542
  const heading = item.frontmatter.name || item.name;
12465
12543
  const hasExistingHeading = bodyStartsWithHeading(stripped.content);
12466
12544
  let content;
@@ -12477,8 +12555,8 @@ ${stripped.content}
12477
12555
  ${stripped.content}
12478
12556
  `;
12479
12557
  }
12480
- if (mode === "fileMatch" && fileMatch) {
12481
- warnings.push(`Using fileMatch mode with pattern: ${fileMatch}`);
12558
+ if (mode === "fileMatch" && fileMatchPattern) {
12559
+ warnings.push(`Using fileMatch mode with pattern: ${fileMatchPattern}`);
12482
12560
  }
12483
12561
  return {
12484
12562
  content,
@@ -12486,7 +12564,7 @@ ${stripped.content}
12486
12564
  warnings
12487
12565
  };
12488
12566
  }
12489
- var LANGUAGE_GLOB_MAP, UNSUPPORTED_AGENT_FIELDS;
12567
+ var LANGUAGE_GLOB_MAP;
12490
12568
  var init_md_to_kiro_steering = __esm(() => {
12491
12569
  init_md_strip();
12492
12570
  LANGUAGE_GLOB_MAP = {
@@ -12510,7 +12588,6 @@ var init_md_to_kiro_steering = __esm(() => {
12510
12588
  vue: "**/*.vue",
12511
12589
  svelte: "**/*.svelte"
12512
12590
  };
12513
- UNSUPPORTED_AGENT_FIELDS = ["model", "tools", "memory", "argumentHint"];
12514
12591
  });
12515
12592
 
12516
12593
  // src/commands/portable/converters/md-to-mdc.ts
@@ -62696,6 +62773,22 @@ var init_agents = __esm(() => {
62696
62773
  globalPath: join59(home3, ".kilocode/skills"),
62697
62774
  detect: async () => existsSync39(join59(home3, ".kilocode"))
62698
62775
  },
62776
+ kiro: {
62777
+ name: "kiro",
62778
+ displayName: "Kiro",
62779
+ projectPath: ".kiro/skills",
62780
+ globalPath: join59(home3, ".kiro/skills"),
62781
+ detect: async () => hasAnyInstallSignal2([
62782
+ join59(process.cwd(), ".kiro/skills"),
62783
+ join59(process.cwd(), ".kiro/steering"),
62784
+ join59(process.cwd(), ".kiro/agents"),
62785
+ join59(process.cwd(), ".kiro/settings/mcp.json"),
62786
+ join59(home3, ".kiro/skills"),
62787
+ join59(home3, ".kiro/steering"),
62788
+ join59(home3, ".kiro/agents"),
62789
+ join59(home3, ".kiro/settings/mcp.json")
62790
+ ])
62791
+ },
62699
62792
  roo: {
62700
62793
  name: "roo",
62701
62794
  displayName: "Roo Code",
@@ -63954,7 +64047,7 @@ var package_default;
63954
64047
  var init_package = __esm(() => {
63955
64048
  package_default = {
63956
64049
  name: "claudekit-cli",
63957
- version: "4.4.0-dev.12",
64050
+ version: "4.4.0-dev.13",
63958
64051
  description: "CLI tool for bootstrapping and updating ClaudeKit projects",
63959
64052
  type: "module",
63960
64053
  repository: {
@@ -81546,7 +81639,8 @@ var init_migrate_command_help = __esm(() => {
81546
81639
  " Default mode is smart-detected: no/stale registry → install, valid registry → reconcile",
81547
81640
  " --respect-deletions disables the auto-reinstall heuristic for empty directories",
81548
81641
  " --force overrides skip decisions per item; --reinstall-empty-dirs is a per-directory heuristic",
81549
- " Codex commands migrate as skills: project scope writes .agents/skills, global scope writes ~/.agents/skills"
81642
+ " Codex commands migrate as skills: project scope writes .agents/skills, global scope writes ~/.agents/skills",
81643
+ " Kiro agents migrate as custom subagents; rules/config migrate as steering files; skills copy to .kiro/skills; commands/hooks are skipped"
81550
81644
  ].join(`
81551
81645
  `)
81552
81646
  }
@@ -82019,7 +82113,7 @@ var init_skills_command_help = __esm(() => {
82019
82113
  },
82020
82114
  {
82021
82115
  flags: "-a, --agent <agent>",
82022
- description: "Target agent(s) - can be specified multiple times. Valid: claude-code, cursor, codex, opencode, goose, gemini-cli, antigravity, github-copilot, amp, kilo, roo, windsurf, cline, openhands"
82116
+ description: "Target agent(s) - can be specified multiple times. Valid: claude-code, cursor, codex, opencode, goose, gemini-cli, antigravity, github-copilot, amp, kilo, kiro, roo, windsurf, cline, openhands"
82023
82117
  },
82024
82118
  {
82025
82119
  flags: "-g, --global",
@@ -82087,6 +82181,7 @@ var init_skills_command_help = __esm(() => {
82087
82181
  github-copilot GitHub Copilot
82088
82182
  amp Amp
82089
82183
  kilo Kilo Code
82184
+ kiro Kiro
82090
82185
  roo Roo Code
82091
82186
  windsurf Windsurf IDE
82092
82187
  cline Cline
@@ -114066,6 +114161,7 @@ var AgentType = exports_external.enum([
114066
114161
  "github-copilot",
114067
114162
  "amp",
114068
114163
  "kilo",
114164
+ "kiro",
114069
114165
  "roo",
114070
114166
  "windsurf",
114071
114167
  "cline",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "claudekit-cli",
3
- "version": "4.4.0-dev.12",
3
+ "version": "4.4.0-dev.13",
4
4
  "description": "CLI tool for bootstrapping and updating ClaudeKit projects",
5
5
  "type": "module",
6
6
  "repository": {