Conversation
- Add converter (src/converters/claude-to-kilocode.ts) with MCP type mapping - Add writer (src/targets/kilocode.ts) with backup/merge for kilo.json - Add type definitions (src/types/kilocode.ts) - Add format specification (docs/specs/kilocode.md) - Update README with KiloCode install and sync commands - Add converter and writer tests - Converter respects options.agentMode (primary/subagent)
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 423e0af025
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| if (targetName === "kilocode") { | ||
| if (hasExplicitOutput) return outputRoot | ||
| if (scope === "global") return path.join(os.homedir(), ".config", "kilo") | ||
| return path.join(process.cwd(), ".kilo") |
There was a problem hiding this comment.
Resolve workspace KiloCode installs from the project root
When install/convert --to kilocode --scope workspace runs without an explicit --output, this branch resolves the root to cwd/.kilo, but writeKiloCodeBundle() still appends .kilo and .kilocode inside whatever it receives. The default workspace flow therefore writes agents to .kilo/.kilo/agents, skills to .kilo/.kilocode/skills, and kilo.json under .kilo/ instead of the documented project locations. Either return cwd here or make the writer detect an already-resolved .kilo root like writeKiroBundle() does.
Useful? React with 👍 / 👎.
| const home = process.env.HOME || process.env.USERPROFILE || "" | ||
| return { | ||
| configDir: path.join(home, ".config", "kilo"), | ||
| agentsDir: path.join(home, ".config", "kilo", "agents"), | ||
| skillsDir: path.join(home, ".kilocode", "skills"), |
There was a problem hiding this comment.
Honor
--output for global KiloCode installs
In global scope this helper ignores the outputRoot argument and recomputes destinations from HOME/USERPROFILE, so install/convert --to kilocode --scope global --output /tmp/out still mutates the real ~/.config/kilo/~/.kilocode tree. That makes dry runs and tests unsafe and breaks the explicit-output override that resolveTargetOutputRoot() already provides.
Useful? React with 👍 / 👎.
| const skillDirs = plugin.skills.map((skill) => ({ | ||
| name: skill.name, | ||
| sourceDir: skill.sourceDir, |
There was a problem hiding this comment.
Normalize copied skill names to KiloCode's naming rules
This copies Claude skill directories verbatim, but the KiloCode spec added in this change only allows skill names matching ^[a-z][a-z0-9-]*$. The compound-engineering plugin already ships generate_command and resolve_parallel, so the converted .kilocode/skills/* tree contains invalid names that KiloCode will not index or auto-activate. A KiloCode-specific rename step is needed instead of pass-through copying.
Useful? React with 👍 / 👎.
|
@jrthib please address the review feedback please. |
Summary
Adds a
kilocodetarget provider to the converter CLI, enabling automatic conversion and installation of the compound-engineering plugin for KiloCode CLI users.Changes
src/converters/claude-to-kilocode.ts): Converts Claude plugin format to KiloCode format with MCP type mapping (http → remote, stdio → local)src/targets/kilocode.ts): Writes KiloCode bundle with backup/merge for existingkilo.jsonsrc/types/kilocode.ts): Type definitions for KiloCode bundle structuredocs/specs/kilocode.md): Format specification documenting KiloCode's directory structure, agent frontmatter, and MCP configurationagentModeoption testsKey Features
options.agentModefor agent mode (primaryorsubagent)~/.config/kilo/) and workspace (.kilo/) scopeskilo.jsonbefore merging MCP serversUsage
Test plan
bun testpasses (403 tests)bun run src/index.ts convert --to kilocode ./plugins/compound-engineeringproduces valid outputbun run src/index.ts install --to kilocode --scope global ./plugins/compound-engineeringinstalls to~/.config/kilo/kilo.jsonbacked up before modification