this repo has no description

Add more supported backend (#6)

authored by

Lintao He and committed by
GitHub
9c9d00cd 5c66f606

+102
+6
README.md
··· 52 52 | Backend | Local directory | Global directory | 53 53 |---------|----------------|-----------------| 54 54 | Claude | `.claude/skills/` | `~/.claude/skills/` | 55 + | Cline | `.agents/skills/` | `~/.agents/skills/` | 55 56 | Codex | `.codex/skills/` | `~/.codex/skills/` | 56 57 | Copilot | `.github/skills/` | `~/.github/skills/` | 57 58 | Crush | `.crush/skills/` | `~/.crush/skills/` | 58 59 | Cursor | `.cursor/skills/` | `~/.cursor/skills/` | 59 60 | Gemini | `.gemini/skills/` | `~/.gemini/skills/` | 61 + | Kilo Code | `.kilocode/skills/` | `~/.kilocode/skills/` | 62 + | Kiro | `.kiro/skills/` | `~/.kiro/skills/` | 60 63 | Opencode | `.opencode/skills/` | `~/.opencode/skills/` | 64 + | Qoder | `.qoder/skills/` | `~/.qoder/skills/` | 65 + | Roo Code | `.roo/skills/` | `~/.roo/skills/` | 66 + | Trae | `.trae/skills/` | `~/.trae/skills/` | 61 67 | Windsurf | `.windsurf/skills/` | `~/.codeium/windsurf/skills/` | 62 68 63 69 Skills are installed as relative symlinks for portability.
+84
pixi_skills/backend.py
··· 10 10 """Available backend names.""" 11 11 12 12 CLAUDE = "claude" 13 + CLINE = "cline" 13 14 CODEX = "codex" 14 15 COPILOT = "copilot" 15 16 CRUSH = "crush" 16 17 CURSOR = "cursor" 17 18 GEMINI = "gemini" 19 + KIRO = "kiro" 20 + KILOCODE = "kilocode" 18 21 OPENCODE = "opencode" 22 + QODER = "qoder" 23 + ROOCODE = "roocode" 24 + TRAE = "trae" 19 25 WINDSURF = "windsurf" 20 26 21 27 ··· 99 105 return Path.home() / ".claude/skills" 100 106 101 107 108 + class ClineBackend(Backend): 109 + """Backend for Cline.""" 110 + 111 + name = "cline" 112 + 113 + def get_skills_dir(self, scope: Scope) -> Path: 114 + if scope == Scope.LOCAL: 115 + return Path(".agents/skills") 116 + else: 117 + return Path.home() / ".agents/skills" 118 + 119 + 102 120 class CrushBackend(Backend): 103 121 """Backend for Crush.""" 104 122 ··· 183 201 return Path.home() / ".codeium/windsurf/skills" 184 202 185 203 204 + class KiroBackend(Backend): 205 + """Backend for Kiro.""" 206 + 207 + name = "kiro" 208 + 209 + def get_skills_dir(self, scope: Scope) -> Path: 210 + if scope == Scope.LOCAL: 211 + return Path(".kiro/skills") 212 + else: 213 + return Path.home() / ".kiro/skills" 214 + 215 + 216 + class KiloCodeBackend(Backend): 217 + """Backend for Kilo Code.""" 218 + 219 + name = "kilocode" 220 + 221 + def get_skills_dir(self, scope: Scope) -> Path: 222 + if scope == Scope.LOCAL: 223 + return Path(".kilocode/skills") 224 + else: 225 + return Path.home() / ".kilocode/skills" 226 + 227 + 228 + class TraeBackend(Backend): 229 + """Backend for Trae.""" 230 + 231 + name = "trae" 232 + 233 + def get_skills_dir(self, scope: Scope) -> Path: 234 + if scope == Scope.LOCAL: 235 + return Path(".trae/skills") 236 + else: 237 + return Path.home() / ".trae/skills" 238 + 239 + 240 + class QoderBackend(Backend): 241 + """Backend for Qoder.""" 242 + 243 + name = "qoder" 244 + 245 + def get_skills_dir(self, scope: Scope) -> Path: 246 + if scope == Scope.LOCAL: 247 + return Path(".qoder/skills") 248 + else: 249 + return Path.home() / ".qoder/skills" 250 + 251 + 252 + class RooCodeBackend(Backend): 253 + """Backend for Roo Code.""" 254 + 255 + name = "roocode" 256 + 257 + def get_skills_dir(self, scope: Scope) -> Path: 258 + if scope == Scope.LOCAL: 259 + return Path(".roo/skills") 260 + else: 261 + return Path.home() / ".roo/skills" 262 + 263 + 186 264 # Registry of available backends 187 265 BACKENDS: dict[BackendName, type[Backend]] = { 188 266 BackendName.CLAUDE: ClaudeBackend, 267 + BackendName.CLINE: ClineBackend, 189 268 BackendName.CODEX: CodexBackend, 190 269 BackendName.COPILOT: CopilotBackend, 191 270 BackendName.CRUSH: CrushBackend, 192 271 BackendName.CURSOR: CursorBackend, 193 272 BackendName.GEMINI: GeminiBackend, 273 + BackendName.KIRO: KiroBackend, 274 + BackendName.KILOCODE: KiloCodeBackend, 194 275 BackendName.OPENCODE: OpencodeBackend, 276 + BackendName.QODER: QoderBackend, 277 + BackendName.ROOCODE: RooCodeBackend, 278 + BackendName.TRAE: TraeBackend, 195 279 BackendName.WINDSURF: WindsurfBackend, 196 280 } 197 281
+12
tests/test_backend.py
··· 7 7 Backend, 8 8 BackendName, 9 9 ClaudeBackend, 10 + ClineBackend, 10 11 CodexBackend, 11 12 CopilotBackend, 12 13 CrushBackend, 13 14 CursorBackend, 14 15 GeminiBackend, 16 + KiloCodeBackend, 17 + KiroBackend, 15 18 OpencodeBackend, 19 + QoderBackend, 20 + RooCodeBackend, 21 + TraeBackend, 16 22 WindsurfBackend, 17 23 get_all_backends, 18 24 get_backend, ··· 46 52 "backend_cls,local_dir,global_suffix", 47 53 [ 48 54 (ClaudeBackend, ".claude/skills", ".claude/skills"), 55 + (ClineBackend, ".agents/skills", ".agents/skills"), 49 56 (CrushBackend, ".crush/skills", ".crush/skills"), 50 57 (CursorBackend, ".cursor/skills", ".cursor/skills"), 51 58 (CodexBackend, ".codex/skills", ".codex/skills"), 52 59 (CopilotBackend, ".github/skills", ".github/skills"), 53 60 (GeminiBackend, ".gemini/skills", ".gemini/skills"), 61 + (KiloCodeBackend, ".kilocode/skills", ".kilocode/skills"), 62 + (KiroBackend, ".kiro/skills", ".kiro/skills"), 54 63 (OpencodeBackend, ".opencode/skills", ".opencode/skills"), 64 + (QoderBackend, ".qoder/skills", ".qoder/skills"), 65 + (RooCodeBackend, ".roo/skills", ".roo/skills"), 66 + (TraeBackend, ".trae/skills", ".trae/skills"), 55 67 (WindsurfBackend, ".windsurf/skills", ".codeium/windsurf/skills"), 56 68 ], 57 69 )