@every-env/compound-plugin 0.7.0 → 0.9.0

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.
Files changed (40) hide show
  1. package/.cursor-plugin/marketplace.json +25 -0
  2. package/CHANGELOG.md +21 -0
  3. package/README.md +18 -8
  4. package/bun.lock +1 -0
  5. package/docs/brainstorms/2026-02-14-copilot-converter-target-brainstorm.md +117 -0
  6. package/docs/brainstorms/2026-02-17-copilot-skill-naming-brainstorm.md +30 -0
  7. package/docs/plans/2026-02-14-feat-add-copilot-converter-target-plan.md +328 -0
  8. package/docs/specs/copilot.md +122 -0
  9. package/docs/specs/kiro.md +171 -0
  10. package/package.json +1 -1
  11. package/plugins/coding-tutor/.cursor-plugin/plugin.json +21 -0
  12. package/plugins/compound-engineering/.claude-plugin/plugin.json +1 -1
  13. package/plugins/compound-engineering/.cursor-plugin/plugin.json +31 -0
  14. package/plugins/compound-engineering/.mcp.json +8 -0
  15. package/plugins/compound-engineering/CHANGELOG.md +10 -0
  16. package/plugins/compound-engineering/commands/lfg.md +3 -3
  17. package/plugins/compound-engineering/commands/slfg.md +2 -2
  18. package/plugins/compound-engineering/commands/workflows/plan.md +15 -1
  19. package/src/commands/convert.ts +2 -1
  20. package/src/commands/install.ts +9 -1
  21. package/src/commands/sync.ts +8 -8
  22. package/src/converters/{claude-to-cursor.ts → claude-to-copilot.ts} +93 -49
  23. package/src/converters/claude-to-kiro.ts +262 -0
  24. package/src/sync/{cursor.ts → copilot.ts} +36 -14
  25. package/src/targets/copilot.ts +48 -0
  26. package/src/targets/index.ts +18 -9
  27. package/src/targets/kiro.ts +122 -0
  28. package/src/types/copilot.ts +31 -0
  29. package/src/types/kiro.ts +44 -0
  30. package/src/utils/frontmatter.ts +1 -1
  31. package/tests/copilot-converter.test.ts +467 -0
  32. package/tests/copilot-writer.test.ts +189 -0
  33. package/tests/kiro-converter.test.ts +381 -0
  34. package/tests/kiro-writer.test.ts +273 -0
  35. package/tests/sync-copilot.test.ts +148 -0
  36. package/src/targets/cursor.ts +0 -48
  37. package/src/types/cursor.ts +0 -29
  38. package/tests/cursor-converter.test.ts +0 -347
  39. package/tests/cursor-writer.test.ts +0 -137
  40. package/tests/sync-cursor.test.ts +0 -92
@@ -0,0 +1,122 @@
1
+ # GitHub Copilot Spec (Agents, Skills, MCP)
2
+
3
+ Last verified: 2026-02-14
4
+
5
+ ## Primary sources
6
+
7
+ ```
8
+ https://docs.github.com/en/copilot/reference/custom-agents-configuration
9
+ https://docs.github.com/en/copilot/concepts/agents/about-agent-skills
10
+ https://docs.github.com/en/copilot/concepts/agents/coding-agent/mcp-and-coding-agent
11
+ ```
12
+
13
+ ## Config locations
14
+
15
+ | Scope | Path |
16
+ |-------|------|
17
+ | Project agents | `.github/agents/*.agent.md` |
18
+ | Project skills | `.github/skills/*/SKILL.md` |
19
+ | Project instructions | `.github/copilot-instructions.md` |
20
+ | Path-specific instructions | `.github/instructions/*.instructions.md` |
21
+ | Project prompts | `.github/prompts/*.prompt.md` |
22
+ | Org/enterprise agents | `.github-private/agents/*.agent.md` |
23
+ | Personal skills | `~/.copilot/skills/*/SKILL.md` |
24
+ | Directory instructions | `AGENTS.md` (nearest ancestor wins) |
25
+
26
+ ## Agents (.agent.md files)
27
+
28
+ - Custom agents are Markdown files with YAML frontmatter stored in `.github/agents/`.
29
+ - File extension is `.agent.md` (or `.md`). Filenames may only contain: `.`, `-`, `_`, `a-z`, `A-Z`, `0-9`.
30
+ - `description` is the only required frontmatter field.
31
+
32
+ ### Frontmatter fields
33
+
34
+ | Field | Required | Default | Description |
35
+ |-------|----------|---------|-------------|
36
+ | `name` | No | Derived from filename | Display name |
37
+ | `description` | **Yes** | — | What the agent does |
38
+ | `tools` | No | `["*"]` | Tool access list. `[]` disables all tools. |
39
+ | `target` | No | both | `vscode`, `github-copilot`, or omit for both |
40
+ | `infer` | No | `true` | Auto-select based on task context |
41
+ | `model` | No | Platform default | AI model (works in IDE, may be ignored on github.com) |
42
+ | `mcp-servers` | No | — | MCP config (org/enterprise agents only) |
43
+ | `metadata` | No | — | Arbitrary key-value annotations |
44
+
45
+ ### Character limit
46
+
47
+ Agent body content is limited to **30,000 characters**.
48
+
49
+ ### Tool names
50
+
51
+ | Name | Aliases | Purpose |
52
+ |------|---------|---------|
53
+ | `execute` | `shell`, `Bash` | Run shell commands |
54
+ | `read` | `Read` | Read files |
55
+ | `edit` | `Edit`, `Write` | Modify files |
56
+ | `search` | `Grep`, `Glob` | Search files |
57
+ | `agent` | `Task` | Invoke other agents |
58
+ | `web` | `WebSearch`, `WebFetch` | Web access |
59
+
60
+ ## Skills (SKILL.md)
61
+
62
+ - Skills follow the open SKILL.md standard (same format as Claude Code and Cursor).
63
+ - A skill is a directory containing `SKILL.md` plus optional `scripts/`, `references/`, and `assets/`.
64
+ - YAML frontmatter requires `name` and `description` fields.
65
+ - Skills are loaded on-demand when Copilot determines relevance.
66
+
67
+ ### Discovery locations
68
+
69
+ | Scope | Path |
70
+ |-------|------|
71
+ | Project | `.github/skills/*/SKILL.md` |
72
+ | Project (Claude-compatible) | `.claude/skills/*/SKILL.md` |
73
+ | Project (auto-discovery) | `.agents/skills/*/SKILL.md` |
74
+ | Personal | `~/.copilot/skills/*/SKILL.md` |
75
+
76
+ ## MCP (Model Context Protocol)
77
+
78
+ - MCP configuration is set via **Repository Settings > Copilot > Coding agent > MCP configuration** on GitHub.
79
+ - Repository-level agents **cannot** define MCP servers inline; use repository settings instead.
80
+ - Org/enterprise agents can embed MCP server definitions in frontmatter.
81
+ - All env var names must use the `COPILOT_MCP_` prefix.
82
+ - Only MCP tools are supported (not resources or prompts).
83
+
84
+ ### Config structure
85
+
86
+ ```json
87
+ {
88
+ "mcpServers": {
89
+ "server-name": {
90
+ "type": "local",
91
+ "command": "npx",
92
+ "args": ["package"],
93
+ "tools": ["*"],
94
+ "env": {
95
+ "API_KEY": "COPILOT_MCP_API_KEY"
96
+ }
97
+ }
98
+ }
99
+ }
100
+ ```
101
+
102
+ ### Server types
103
+
104
+ | Type | Fields |
105
+ |------|--------|
106
+ | Local/stdio | `type: "local"`, `command`, `args`, `tools`, `env` |
107
+ | Remote/SSE | `type: "sse"`, `url`, `tools`, `headers` |
108
+
109
+ ## Prompts (.prompt.md)
110
+
111
+ - Reusable prompt files stored in `.github/prompts/`.
112
+ - Available in VS Code, Visual Studio, and JetBrains IDEs only (not on github.com).
113
+ - Invoked via `/promptname` in chat.
114
+ - Support variable syntax: `${input:name}`, `${file}`, `${selection}`.
115
+
116
+ ## Precedence
117
+
118
+ 1. Repository-level agents
119
+ 2. Organization-level agents (`.github-private`)
120
+ 3. Enterprise-level agents (`.github-private`)
121
+
122
+ Within a repo, `AGENTS.md` files in directories provide nearest-ancestor-wins instructions.
@@ -0,0 +1,171 @@
1
+ # Kiro CLI Spec (Custom Agents, Skills, Steering, MCP, Settings)
2
+
3
+ Last verified: 2026-02-17
4
+
5
+ ## Primary sources
6
+
7
+ ```
8
+ https://kiro.dev/docs/cli/
9
+ https://kiro.dev/docs/cli/custom-agents/configuration-reference/
10
+ https://kiro.dev/docs/cli/skills/
11
+ https://kiro.dev/docs/cli/steering/
12
+ https://kiro.dev/docs/cli/mcp/
13
+ https://kiro.dev/docs/cli/hooks/
14
+ https://agentskills.io
15
+ ```
16
+
17
+ ## Config locations
18
+
19
+ - Project-level config: `.kiro/` directory at project root.
20
+ - No global/user-level config directory — all config is project-scoped.
21
+
22
+ ## Directory structure
23
+
24
+ ```
25
+ .kiro/
26
+ ├── agents/
27
+ │ ├── <name>.json # Agent configuration
28
+ │ └── prompts/
29
+ │ └── <name>.md # Agent prompt files
30
+ ├── skills/
31
+ │ └── <name>/
32
+ │ └── SKILL.md # Skill definition
33
+ ├── steering/
34
+ │ └── <name>.md # Always-on context files
35
+ └── settings/
36
+ └── mcp.json # MCP server configuration
37
+ ```
38
+
39
+ ## Custom agents (JSON config + prompt files)
40
+
41
+ - Custom agents are JSON files in `.kiro/agents/`.
42
+ - Each agent has a corresponding prompt `.md` file, referenced via `file://` URI.
43
+ - Agent config has 14 possible fields (see below).
44
+ - Agents are activated by user selection (no auto-activation).
45
+ - The converter outputs a subset of fields relevant to converted plugins.
46
+
47
+ ### Agent config fields
48
+
49
+ | Field | Type | Used in conversion | Notes |
50
+ |---|---|---|---|
51
+ | `name` | string | Yes | Agent display name |
52
+ | `description` | string | Yes | Human-readable description |
53
+ | `prompt` | string or `file://` URI | Yes | System prompt or file reference |
54
+ | `tools` | string[] | Yes (`["*"]`) | Available tools |
55
+ | `resources` | string[] | Yes | `file://`, `skill://`, `knowledgeBase` URIs |
56
+ | `includeMcpJson` | boolean | Yes (`true`) | Inherit project MCP servers |
57
+ | `welcomeMessage` | string | Yes | Agent switch greeting |
58
+ | `mcpServers` | object | No | Per-agent MCP config (use includeMcpJson instead) |
59
+ | `toolAliases` | Record | No | Tool name remapping |
60
+ | `allowedTools` | string[] | No | Auto-approve patterns |
61
+ | `toolsSettings` | object | No | Per-tool configuration |
62
+ | `hooks` | object | No (future work) | 5 trigger types |
63
+ | `model` | string | No | Model selection |
64
+ | `keyboardShortcut` | string | No | Quick-switch shortcut |
65
+
66
+ ### Example agent config
67
+
68
+ ```json
69
+ {
70
+ "name": "security-reviewer",
71
+ "description": "Reviews code for security vulnerabilities",
72
+ "prompt": "file://./prompts/security-reviewer.md",
73
+ "tools": ["*"],
74
+ "resources": [
75
+ "file://.kiro/steering/**/*.md",
76
+ "skill://.kiro/skills/**/SKILL.md"
77
+ ],
78
+ "includeMcpJson": true,
79
+ "welcomeMessage": "Switching to security-reviewer. Reviews code for security vulnerabilities"
80
+ }
81
+ ```
82
+
83
+ ## Skills (SKILL.md standard)
84
+
85
+ - Skills follow the open [Agent Skills](https://agentskills.io) standard.
86
+ - A skill is a folder containing `SKILL.md` plus optional supporting files.
87
+ - Skills live in `.kiro/skills/`.
88
+ - `SKILL.md` uses YAML frontmatter with `name` and `description` fields.
89
+ - Kiro activates skills on demand based on description matching.
90
+ - The `description` field is critical — Kiro uses it to decide when to activate the skill.
91
+
92
+ ### Constraints
93
+
94
+ - Skill name: max 64 characters, pattern `^[a-z][a-z0-9-]*$`, no consecutive hyphens (`--`).
95
+ - Skill description: max 1024 characters.
96
+ - Skill name must match parent directory name.
97
+
98
+ ### Example
99
+
100
+ ```yaml
101
+ ---
102
+ name: workflows-plan
103
+ description: Plan work by analyzing requirements and creating actionable steps
104
+ ---
105
+
106
+ # Planning Workflow
107
+
108
+ Detailed instructions...
109
+ ```
110
+
111
+ ## Steering files
112
+
113
+ - Markdown files in `.kiro/steering/`.
114
+ - Always loaded into every agent session's context.
115
+ - Equivalent to Claude Code's CLAUDE.md.
116
+ - Used for project-wide instructions, coding standards, and conventions.
117
+
118
+ ## MCP server configuration
119
+
120
+ - MCP servers are configured in `.kiro/settings/mcp.json`.
121
+ - **Only stdio transport is supported** — `command` + `args` + `env`.
122
+ - HTTP/SSE transport (`url`, `headers`) is NOT supported by Kiro CLI.
123
+ - The converter skips HTTP-only MCP servers with a warning.
124
+
125
+ ### Example
126
+
127
+ ```json
128
+ {
129
+ "mcpServers": {
130
+ "playwright": {
131
+ "command": "npx",
132
+ "args": ["-y", "@anthropic/mcp-playwright"]
133
+ },
134
+ "context7": {
135
+ "command": "npx",
136
+ "args": ["-y", "@context7/mcp-server"]
137
+ }
138
+ }
139
+ }
140
+ ```
141
+
142
+ ## Hooks
143
+
144
+ - Kiro supports 5 hook trigger types: `agentSpawn`, `userPromptSubmit`, `preToolUse`, `postToolUse`, `stop`.
145
+ - Hooks are configured inside agent JSON configs (not separate files).
146
+ - 3 of 5 triggers map to Claude Code hooks (`preToolUse`, `postToolUse`, `stop`).
147
+ - Not converted by the plugin converter for MVP — a warning is emitted.
148
+
149
+ ## Conversion lossy mappings
150
+
151
+ | Claude Code Feature | Kiro Status | Notes |
152
+ |---|---|---|
153
+ | `Edit` tool (surgical replacement) | Degraded -> `write` (full-file) | Kiro write overwrites entire files |
154
+ | `context: fork` | Lost | No execution isolation control |
155
+ | `!`command`` dynamic injection | Lost | No pre-processing of markdown |
156
+ | `disable-model-invocation` | Lost | No invocation control |
157
+ | `allowed-tools` per skill | Lost | No tool permission scoping per skill |
158
+ | `$ARGUMENTS` interpolation | Lost | No structured argument passing |
159
+ | Claude hooks | Skipped | Future follow-up (near-1:1 for 3/5 triggers) |
160
+ | HTTP MCP servers | Skipped | Kiro only supports stdio transport |
161
+
162
+ ## Overwrite behavior during conversion
163
+
164
+ | Content Type | Strategy | Rationale |
165
+ |---|---|---|
166
+ | Generated agents (JSON + prompt) | Overwrite | Generated, not user-authored |
167
+ | Generated skills (from commands) | Overwrite | Generated, not user-authored |
168
+ | Copied skills (pass-through) | Overwrite | Plugin is source of truth |
169
+ | Steering files | Overwrite | Generated from CLAUDE.md |
170
+ | `mcp.json` | Merge with backup | User may have added their own servers |
171
+ | User-created agents/skills | Preserved | Don't delete orphans |
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@every-env/compound-plugin",
3
- "version": "0.7.0",
3
+ "version": "0.9.0",
4
4
  "type": "module",
5
5
  "private": false,
6
6
  "bin": {
@@ -0,0 +1,21 @@
1
+ {
2
+ "name": "coding-tutor",
3
+ "displayName": "Coding Tutor",
4
+ "version": "1.2.1",
5
+ "description": "Personalized coding tutorials that use your actual codebase for examples with spaced repetition quizzes",
6
+ "author": {
7
+ "name": "Nityesh Agarwal"
8
+ },
9
+ "homepage": "https://github.com/EveryInc/compound-engineering-plugin",
10
+ "repository": "https://github.com/EveryInc/compound-engineering-plugin",
11
+ "license": "MIT",
12
+ "keywords": [
13
+ "cursor",
14
+ "plugin",
15
+ "coding",
16
+ "programming",
17
+ "tutorial",
18
+ "learning",
19
+ "spaced-repetition"
20
+ ]
21
+ }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "compound-engineering",
3
- "version": "2.34.0",
3
+ "version": "2.35.0",
4
4
  "description": "AI-powered development tools. 29 agents, 22 commands, 19 skills, 1 MCP server for code review, research, design, and workflow automation.",
5
5
  "author": {
6
6
  "name": "Kieran Klaassen",
@@ -0,0 +1,31 @@
1
+ {
2
+ "name": "compound-engineering",
3
+ "displayName": "Compound Engineering",
4
+ "version": "2.33.0",
5
+ "description": "AI-powered development tools. 29 agents, 22 commands, 19 skills, 1 MCP server for code review, research, design, and workflow automation.",
6
+ "author": {
7
+ "name": "Kieran Klaassen",
8
+ "email": "kieran@every.to",
9
+ "url": "https://github.com/kieranklaassen"
10
+ },
11
+ "homepage": "https://every.to/source-code/my-ai-had-already-fixed-the-code-before-i-saw-it",
12
+ "repository": "https://github.com/EveryInc/compound-engineering-plugin",
13
+ "license": "MIT",
14
+ "keywords": [
15
+ "cursor",
16
+ "plugin",
17
+ "ai-powered",
18
+ "compound-engineering",
19
+ "workflow-automation",
20
+ "code-review",
21
+ "rails",
22
+ "ruby",
23
+ "python",
24
+ "typescript",
25
+ "knowledge-management",
26
+ "image-generation",
27
+ "agent-browser",
28
+ "browser-automation"
29
+ ],
30
+ "mcpServers": ".mcp.json"
31
+ }
@@ -0,0 +1,8 @@
1
+ {
2
+ "mcpServers": {
3
+ "context7": {
4
+ "type": "http",
5
+ "url": "https://mcp.context7.com/mcp"
6
+ }
7
+ }
8
+ }
@@ -5,6 +5,16 @@ All notable changes to the compound-engineering plugin will be documented in thi
5
5
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
6
6
  and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
7
 
8
+ ## [2.35.0] - 2026-02-17
9
+
10
+ ### Fixed
11
+
12
+ - **`/lfg` and `/slfg` first-run failures** — Made ralph-loop step optional with graceful fallback when `ralph-wiggum` skill is not installed (#154). Added explicit "do not stop" instruction across all steps (#134).
13
+ - **`/workflows:plan` not writing file in pipeline** — Added mandatory "Write Plan File" step with explicit Write tool instructions before Post-Generation Options. The file is now always written to disk before any interactive prompts (#155). Also adds pipeline-mode note to skip AskUserQuestion calls when invoked from LFG/SLFG (#134).
14
+ - **Agent namespace typo in `/workflows:plan`** — `Task spec-flow-analyzer(...)` now uses the full qualified name `Task compound-engineering:workflow:spec-flow-analyzer(...)` to prevent Claude from prepending the wrong `workflows:` prefix (#193).
15
+
16
+ ---
17
+
8
18
  ## [2.34.0] - 2026-02-14
9
19
 
10
20
  ### Added
@@ -5,9 +5,9 @@ argument-hint: "[feature description]"
5
5
  disable-model-invocation: true
6
6
  ---
7
7
 
8
- Run these slash commands in order. Do not do anything else.
8
+ Run these slash commands in order. Do not do anything else. Do not stop between steps — complete every step through to the end.
9
9
 
10
- 1. `/ralph-wiggum:ralph-loop "finish all slash commands" --completion-promise "DONE"`
10
+ 1. **Optional:** If the `ralph-wiggum` skill is available, run `/ralph-wiggum:ralph-loop "finish all slash commands" --completion-promise "DONE"`. If not available or it fails, skip and continue to step 2 immediately.
11
11
  2. `/workflows:plan $ARGUMENTS`
12
12
  3. `/compound-engineering:deepen-plan`
13
13
  4. `/workflows:work`
@@ -17,4 +17,4 @@ Run these slash commands in order. Do not do anything else.
17
17
  8. `/compound-engineering:feature-video`
18
18
  9. Output `<promise>DONE</promise>` when video is in PR
19
19
 
20
- Start with step 1 now.
20
+ Start with step 2 now (or step 1 if ralph-wiggum is available).
@@ -5,11 +5,11 @@ argument-hint: "[feature description]"
5
5
  disable-model-invocation: true
6
6
  ---
7
7
 
8
- Swarm-enabled LFG. Run these steps in order, parallelizing where indicated.
8
+ Swarm-enabled LFG. Run these steps in order, parallelizing where indicated. Do not stop between steps — complete every step through to the end.
9
9
 
10
10
  ## Sequential Phase
11
11
 
12
- 1. `/ralph-wiggum:ralph-loop "finish all slash commands" --completion-promise "DONE"`
12
+ 1. **Optional:** If the `ralph-wiggum` skill is available, run `/ralph-wiggum:ralph-loop "finish all slash commands" --completion-promise "DONE"`. If not available or it fails, skip and continue to step 2 immediately.
13
13
  2. `/workflows:plan $ARGUMENTS`
14
14
  3. `/compound-engineering:deepen-plan`
15
15
  4. `/workflows:work` — **Use swarm mode**: Make a Task list and launch an army of agent swarm subagents to build the plan
@@ -150,7 +150,7 @@ Think like a product manager - what would make this issue clear and actionable?
150
150
 
151
151
  After planning the issue structure, run SpecFlow Analyzer to validate and refine the feature specification:
152
152
 
153
- - Task spec-flow-analyzer(feature_description, research_findings)
153
+ - Task compound-engineering:workflow:spec-flow-analyzer(feature_description, research_findings)
154
154
 
155
155
  **SpecFlow Analyzer Output:**
156
156
 
@@ -475,6 +475,20 @@ end
475
475
  - [ ] Add names of files in pseudo code examples and todo lists
476
476
  - [ ] Add an ERD mermaid diagram if applicable for new model changes
477
477
 
478
+ ## Write Plan File
479
+
480
+ **REQUIRED: Write the plan file to disk before presenting any options.**
481
+
482
+ ```bash
483
+ mkdir -p docs/plans/
484
+ ```
485
+
486
+ Use the Write tool to save the complete plan to `docs/plans/YYYY-MM-DD-<type>-<descriptive-name>-plan.md`. This step is mandatory and cannot be skipped — even when running as part of LFG/SLFG or other automated pipelines.
487
+
488
+ Confirm: "Plan written to docs/plans/[filename]"
489
+
490
+ **Pipeline mode:** If invoked from an automated workflow (LFG, SLFG, or any `disable-model-invocation` context), skip all AskUserQuestion calls. Make decisions automatically and proceed to writing the plan without interactive prompts.
491
+
478
492
  ## Output Format
479
493
 
480
494
  **Filename:** Use the date and kebab-case filename from Step 2 Title & Categorization.
@@ -23,7 +23,7 @@ export default defineCommand({
23
23
  to: {
24
24
  type: "string",
25
25
  default: "opencode",
26
- description: "Target format (opencode | codex | droid | cursor | pi | gemini)",
26
+ description: "Target format (opencode | codex | droid | cursor | pi | gemini | kiro)",
27
27
  },
28
28
  output: {
29
29
  type: "string",
@@ -146,5 +146,6 @@ function resolveTargetOutputRoot(targetName: string, outputRoot: string, codexHo
146
146
  if (targetName === "droid") return path.join(os.homedir(), ".factory")
147
147
  if (targetName === "cursor") return path.join(outputRoot, ".cursor")
148
148
  if (targetName === "gemini") return path.join(outputRoot, ".gemini")
149
+ if (targetName === "kiro") return path.join(outputRoot, ".kiro")
149
150
  return outputRoot
150
151
  }
@@ -25,7 +25,7 @@ export default defineCommand({
25
25
  to: {
26
26
  type: "string",
27
27
  default: "opencode",
28
- description: "Target format (opencode | codex | droid | cursor | pi | gemini)",
28
+ description: "Target format (opencode | codex | droid | cursor | pi | copilot | gemini | kiro)",
29
29
  },
30
30
  output: {
31
31
  type: "string",
@@ -187,6 +187,14 @@ function resolveTargetOutputRoot(
187
187
  const base = hasExplicitOutput ? outputRoot : process.cwd()
188
188
  return path.join(base, ".gemini")
189
189
  }
190
+ if (targetName === "copilot") {
191
+ const base = hasExplicitOutput ? outputRoot : process.cwd()
192
+ return path.join(base, ".github")
193
+ }
194
+ if (targetName === "kiro") {
195
+ const base = hasExplicitOutput ? outputRoot : process.cwd()
196
+ return path.join(base, ".kiro")
197
+ }
190
198
  return outputRoot
191
199
  }
192
200
 
@@ -6,10 +6,10 @@ import { syncToOpenCode } from "../sync/opencode"
6
6
  import { syncToCodex } from "../sync/codex"
7
7
  import { syncToPi } from "../sync/pi"
8
8
  import { syncToDroid } from "../sync/droid"
9
- import { syncToCursor } from "../sync/cursor"
9
+ import { syncToCopilot } from "../sync/copilot"
10
10
  import { expandHome } from "../utils/resolve-home"
11
11
 
12
- const validTargets = ["opencode", "codex", "pi", "droid", "cursor"] as const
12
+ const validTargets = ["opencode", "codex", "pi", "droid", "copilot"] as const
13
13
  type SyncTarget = (typeof validTargets)[number]
14
14
 
15
15
  function isValidTarget(value: string): value is SyncTarget {
@@ -40,21 +40,21 @@ function resolveOutputRoot(target: SyncTarget): string {
40
40
  return path.join(os.homedir(), ".pi", "agent")
41
41
  case "droid":
42
42
  return path.join(os.homedir(), ".factory")
43
- case "cursor":
44
- return path.join(process.cwd(), ".cursor")
43
+ case "copilot":
44
+ return path.join(process.cwd(), ".github")
45
45
  }
46
46
  }
47
47
 
48
48
  export default defineCommand({
49
49
  meta: {
50
50
  name: "sync",
51
- description: "Sync Claude Code config (~/.claude/) to OpenCode, Codex, Pi, Droid, or Cursor",
51
+ description: "Sync Claude Code config (~/.claude/) to OpenCode, Codex, Pi, Droid, or Copilot",
52
52
  },
53
53
  args: {
54
54
  target: {
55
55
  type: "string",
56
56
  required: true,
57
- description: "Target: opencode | codex | pi | droid | cursor",
57
+ description: "Target: opencode | codex | pi | droid | copilot",
58
58
  },
59
59
  claudeHome: {
60
60
  type: "string",
@@ -97,8 +97,8 @@ export default defineCommand({
97
97
  case "droid":
98
98
  await syncToDroid(config, outputRoot)
99
99
  break
100
- case "cursor":
101
- await syncToCursor(config, outputRoot)
100
+ case "copilot":
101
+ await syncToCopilot(config, outputRoot)
102
102
  break
103
103
  }
104
104