skiller 0.4.3 → 0.5.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.
- package/README.md +171 -175
- package/dist/agents/AbstractAgent.js +4 -4
- package/dist/agents/AgentsMdAgent.js +2 -2
- package/dist/agents/AiderAgent.js +2 -2
- package/dist/agents/AmazonQCliAgent.js +4 -4
- package/dist/agents/AugmentCodeAgent.js +3 -3
- package/dist/agents/ClaudeAgent.js +1 -1
- package/dist/agents/CodexCliAgent.js +9 -9
- package/dist/agents/CopilotAgent.js +2 -2
- package/dist/agents/CrushAgent.js +6 -6
- package/dist/agents/CursorAgent.js +6 -6
- package/dist/agents/FirebenderAgent.js +5 -5
- package/dist/agents/GeminiCliAgent.js +5 -5
- package/dist/agents/KiloCodeAgent.js +2 -2
- package/dist/agents/KiroAgent.js +1 -1
- package/dist/agents/OpenCodeAgent.js +6 -6
- package/dist/agents/QwenCodeAgent.js +2 -2
- package/dist/agents/RooCodeAgent.js +5 -5
- package/dist/agents/ZedAgent.js +9 -9
- package/dist/cli/commands.js +8 -13
- package/dist/cli/handlers.js +17 -19
- package/dist/constants.js +6 -8
- package/dist/core/ConfigLoader.js +11 -19
- package/dist/core/FileSystemUtils.js +56 -72
- package/dist/core/GitignoreUtils.js +38 -38
- package/dist/core/SkillsProcessor.js +39 -138
- package/dist/core/SkillsUtils.js +1 -1
- package/dist/core/UnifiedConfigLoader.js +19 -17
- package/dist/core/agent-selection.js +2 -2
- package/dist/core/apply-engine.js +81 -81
- package/dist/core/revert-engine.js +6 -6
- package/dist/lib.js +25 -24
- package/dist/mcp/merge.js +1 -1
- package/dist/mcp/propagateOpenCodeMcp.js +8 -8
- package/dist/mcp/propagateOpenHandsMcp.js +10 -10
- package/dist/mcp/validate.js +3 -3
- package/dist/revert.js +11 -11
- package/dist/vscode/settings.js +6 -5
- package/package.json +6 -6
package/README.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
#
|
|
1
|
+
# `skiller`
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
A Claude-centric fork of [ruler](https://github.com/intellectronica/ruler) with native skills support:
|
|
4
4
|
|
|
5
5
|
## 1. CLAUDE.md @filename References
|
|
6
6
|
|
|
@@ -22,7 +22,7 @@
|
|
|
22
22
|
|
|
23
23
|
## 4. Claude Root Folder
|
|
24
24
|
|
|
25
|
-
-
|
|
25
|
+
- Default directory is `.claude/` (no extra flags needed)
|
|
26
26
|
- Skills already in `.claude/skills` (no copying)
|
|
27
27
|
- Single directory for all Claude Code config
|
|
28
28
|
|
|
@@ -50,14 +50,14 @@
|
|
|
50
50
|
|
|
51
51
|
---
|
|
52
52
|
|
|
53
|
-
#
|
|
53
|
+
# Skiller: Centralise Your AI Coding Assistant Instructions
|
|
54
54
|
|
|
55
55
|
> **Beta Research Preview**
|
|
56
56
|
>
|
|
57
57
|
> - Please test this version carefully in your environment
|
|
58
|
-
> - Report issues at https://github.com/udecode/
|
|
58
|
+
> - Report issues at https://github.com/udecode/skiller/issues
|
|
59
59
|
|
|
60
|
-
## Why
|
|
60
|
+
## Why Skiller?
|
|
61
61
|
|
|
62
62
|
Managing instructions across multiple AI coding tools becomes complex as your team grows. Different agents (GitHub Copilot, Claude, Cursor, Aider, etc.) require their own configuration files, leading to:
|
|
63
63
|
|
|
@@ -67,130 +67,124 @@ Managing instructions across multiple AI coding tools becomes complex as your te
|
|
|
67
67
|
- **Onboarding friction** for new AI tools
|
|
68
68
|
- **Complex project structures** requiring context-specific instructions for different components
|
|
69
69
|
|
|
70
|
-
|
|
70
|
+
Skiller solves this by providing a **single source of truth** for all your AI agent instructions, automatically distributing them to the right configuration files. With support for **nested rule loading**, Skiller can handle complex project structures with context-specific instructions for different components.
|
|
71
71
|
|
|
72
72
|
## Core Features
|
|
73
73
|
|
|
74
|
-
- **Centralised Rule Management**: Store all AI instructions in a dedicated `.
|
|
75
|
-
- **Nested Rule Loading**: Support complex project structures with multiple `.
|
|
76
|
-
- **Automatic Distribution**:
|
|
77
|
-
- **Targeted Agent Configuration**: Fine-tune which agents are affected and their specific output paths via `
|
|
74
|
+
- **Centralised Rule Management**: Store all AI instructions in a dedicated `.claude/` directory using Markdown files
|
|
75
|
+
- **Nested Rule Loading**: Support complex project structures with multiple `.claude/` directories for context-specific instructions
|
|
76
|
+
- **Automatic Distribution**: Skiller applies these rules to configuration files of supported AI agents
|
|
77
|
+
- **Targeted Agent Configuration**: Fine-tune which agents are affected and their specific output paths via `skiller.toml`
|
|
78
78
|
- **MCP Server Propagation**: Manage and distribute Model Context Protocol (MCP) server settings
|
|
79
79
|
- **`.gitignore` Automation**: Keeps generated agent config files out of version control automatically
|
|
80
80
|
- **Simple CLI**: Easy-to-use commands for initialising and applying configurations
|
|
81
81
|
|
|
82
82
|
## Supported AI Agents
|
|
83
83
|
|
|
84
|
-
| Agent | Rules File(s)
|
|
85
|
-
| ---------------- |
|
|
86
|
-
| AGENTS.md | `AGENTS.md`
|
|
87
|
-
| GitHub Copilot | `AGENTS.md`
|
|
88
|
-
| Claude Code | `CLAUDE.md` (@filename references)
|
|
89
|
-
| OpenAI Codex CLI | `AGENTS.md`
|
|
90
|
-
| Jules | `AGENTS.md`
|
|
91
|
-
| Cursor | `AGENTS.md`
|
|
92
|
-
| Windsurf | `AGENTS.md`
|
|
93
|
-
| Cline | `.clinerules`
|
|
94
|
-
| Crush | `CRUSH.md`
|
|
95
|
-
| Amp | `AGENTS.md`
|
|
96
|
-
| Amazon Q CLI | `.amazonq/rules/
|
|
97
|
-
| Aider | `AGENTS.md`, `.aider.conf.yml`
|
|
98
|
-
| Firebase Studio | `.idx/airules.md`
|
|
99
|
-
| Open Hands | `.openhands/microagents/repo.md`
|
|
100
|
-
| Gemini CLI | `AGENTS.md`
|
|
101
|
-
| Junie | `.junie/guidelines.md`
|
|
102
|
-
| AugmentCode | `.augment/rules/
|
|
103
|
-
| Kilo Code | `.kilocode/rules/
|
|
104
|
-
| OpenCode | `AGENTS.md`
|
|
105
|
-
| Goose | `.goosehints`
|
|
106
|
-
| Qwen Code | `AGENTS.md`
|
|
107
|
-
| RooCode | `AGENTS.md`
|
|
108
|
-
| Zed | `AGENTS.md`
|
|
109
|
-
| Trae AI | `.trae/rules/project_rules.md`
|
|
110
|
-
| Warp | `WARP.md`
|
|
111
|
-
| Kiro | `.kiro/steering/
|
|
112
|
-
| Firebender | `firebender.json`
|
|
84
|
+
| Agent | Rules File(s) | MCP Configuration / Notes |
|
|
85
|
+
| ---------------- | -------------------------------------------------- | ------------------------------------------------ |
|
|
86
|
+
| AGENTS.md | `AGENTS.md` | (pseudo-agent ensuring root `AGENTS.md` exists) |
|
|
87
|
+
| GitHub Copilot | `AGENTS.md` | `.vscode/mcp.json` |
|
|
88
|
+
| Claude Code | `CLAUDE.md` (@filename references) | `.mcp.json` |
|
|
89
|
+
| OpenAI Codex CLI | `AGENTS.md` | `.codex/config.toml` (MCP via Skillz) |
|
|
90
|
+
| Jules | `AGENTS.md` | - |
|
|
91
|
+
| Cursor | `AGENTS.md` | `.cursor/mcp.json` |
|
|
92
|
+
| Windsurf | `AGENTS.md` | `.windsurf/mcp_config.json` |
|
|
93
|
+
| Cline | `.clinerules` | - |
|
|
94
|
+
| Crush | `CRUSH.md` | `.crush.json` |
|
|
95
|
+
| Amp | `AGENTS.md` | - |
|
|
96
|
+
| Amazon Q CLI | `.amazonq/rules/skiller_q_rules.md` | `.amazonq/mcp.json` |
|
|
97
|
+
| Aider | `AGENTS.md`, `.aider.conf.yml` | `.mcp.json` |
|
|
98
|
+
| Firebase Studio | `.idx/airules.md` | `.idx/mcp.json` |
|
|
99
|
+
| Open Hands | `.openhands/microagents/repo.md` | `config.toml` |
|
|
100
|
+
| Gemini CLI | `AGENTS.md` | `.gemini/settings.json` |
|
|
101
|
+
| Junie | `.junie/guidelines.md` | - |
|
|
102
|
+
| AugmentCode | `.augment/rules/skiller_augment_instructions.md` | - |
|
|
103
|
+
| Kilo Code | `.kilocode/rules/skiller_kilocode_instructions.md` | `.kilocode/mcp.json` |
|
|
104
|
+
| OpenCode | `AGENTS.md` | `opencode.json` |
|
|
105
|
+
| Goose | `.goosehints` | - |
|
|
106
|
+
| Qwen Code | `AGENTS.md` | `.qwen/settings.json` |
|
|
107
|
+
| RooCode | `AGENTS.md` | `.roo/mcp.json` |
|
|
108
|
+
| Zed | `AGENTS.md` | `.zed/settings.json` (project root, never $HOME) |
|
|
109
|
+
| Trae AI | `.trae/rules/project_rules.md` | - |
|
|
110
|
+
| Warp | `WARP.md` | - |
|
|
111
|
+
| Kiro | `.kiro/steering/skiller_kiro_instructions.md` | - |
|
|
112
|
+
| Firebender | `firebender.json` | `firebender.json` (rules and MCP in same file) |
|
|
113
113
|
|
|
114
114
|
## Getting Started
|
|
115
115
|
|
|
116
116
|
### Installation
|
|
117
117
|
|
|
118
|
-
**Global Installation (Recommended for CLI use):**
|
|
119
|
-
|
|
120
|
-
```bash
|
|
121
|
-
npm install -g @udecode/ruler
|
|
122
|
-
```
|
|
123
|
-
|
|
124
118
|
**Using `npx` (for one-off commands):**
|
|
125
119
|
|
|
126
120
|
```bash
|
|
127
|
-
npx @
|
|
121
|
+
npx skiller@latest apply
|
|
128
122
|
```
|
|
129
123
|
|
|
130
124
|
### Project Initialisation
|
|
131
125
|
|
|
132
126
|
1. Navigate to your project's root directory
|
|
133
|
-
2. Run `
|
|
127
|
+
2. Run `skiller init`
|
|
134
128
|
3. This creates:
|
|
135
129
|
|
|
136
|
-
- `.
|
|
137
|
-
- `.
|
|
138
|
-
- `.
|
|
130
|
+
- `.claude/` directory
|
|
131
|
+
- `.claude/AGENTS.md`: The primary starter Markdown file for your rules
|
|
132
|
+
- `.claude/skiller.toml`: The main configuration file for Skiller
|
|
139
133
|
|
|
140
|
-
Additionally, you can create a global configuration to use when no local `.
|
|
134
|
+
Additionally, you can create a global configuration to use when no local `.claude/` directory is found:
|
|
141
135
|
|
|
142
136
|
```bash
|
|
143
|
-
|
|
137
|
+
skiller init --global
|
|
144
138
|
```
|
|
145
139
|
|
|
146
|
-
The global configuration will be created to `$XDG_CONFIG_HOME/
|
|
140
|
+
The global configuration will be created to `$XDG_CONFIG_HOME/skiller` (default: `~/.config/skiller`).
|
|
147
141
|
|
|
148
142
|
## Core Concepts
|
|
149
143
|
|
|
150
|
-
### The `.
|
|
144
|
+
### The `.claude/` Directory
|
|
151
145
|
|
|
152
146
|
This is your central hub for all AI agent instructions:
|
|
153
147
|
|
|
154
148
|
- **Primary File Order & Precedence**:
|
|
155
|
-
1. A repository root `AGENTS.md` (outside `.
|
|
156
|
-
2. `.
|
|
157
|
-
3. Remaining discovered `.md` files under `.
|
|
158
|
-
- **Rule Files (`*.md`)**: Discovered recursively from `.
|
|
149
|
+
1. A repository root `AGENTS.md` (outside `.claude/`) if present (highest precedence, prepended)
|
|
150
|
+
2. `.claude/AGENTS.md` (new default starter file)
|
|
151
|
+
3. Remaining discovered `.md` files under `.claude/` (and subdirectories) in sorted order
|
|
152
|
+
- **Rule Files (`*.md`)**: Discovered recursively from `.claude/` or `$XDG_CONFIG_HOME/skiller` and concatenated in the order above
|
|
159
153
|
- **Concatenation Marker**: Each file's content is prepended with `--- Source: <relative_path_to_md_file> ---` for traceability
|
|
160
|
-
- **`
|
|
154
|
+
- **`skiller.toml`**: Master configuration for Skiller's behavior, agent selection, and output paths
|
|
161
155
|
- **`mcp.json`**: Shared MCP server settings
|
|
162
156
|
|
|
163
|
-
This ordering lets you keep a short, high-impact root `AGENTS.md` (e.g. executive project summary) while housing detailed guidance inside `.
|
|
157
|
+
This ordering lets you keep a short, high-impact root `AGENTS.md` (e.g. executive project summary) while housing detailed guidance inside `.claude/`.
|
|
164
158
|
|
|
165
159
|
### Nested Rule Loading
|
|
166
160
|
|
|
167
|
-
|
|
161
|
+
Skiller now supports **nested rule loading** with the `--nested` flag, enabling context-specific instructions for different parts of your project:
|
|
168
162
|
|
|
169
163
|
```
|
|
170
164
|
project/
|
|
171
|
-
├── .
|
|
165
|
+
├── .claude/ # Global project rules
|
|
172
166
|
│ ├── AGENTS.md
|
|
173
167
|
│ └── coding_style.md
|
|
174
168
|
├── src/
|
|
175
|
-
│ └── .
|
|
169
|
+
│ └── .claude/ # Component-specific rules
|
|
176
170
|
│ └── api_guidelines.md
|
|
177
171
|
├── tests/
|
|
178
|
-
│ └── .
|
|
172
|
+
│ └── .claude/ # Test-specific rules
|
|
179
173
|
│ └── testing_conventions.md
|
|
180
174
|
└── docs/
|
|
181
|
-
└── .
|
|
175
|
+
└── .claude/ # Documentation rules
|
|
182
176
|
└── writing_style.md
|
|
183
177
|
```
|
|
184
178
|
|
|
185
179
|
**How it works:**
|
|
186
180
|
|
|
187
|
-
- Discover all `.
|
|
181
|
+
- Discover all `.claude/` directories in the project hierarchy
|
|
188
182
|
- Load and concatenate rules from each directory in order
|
|
189
183
|
- Decide whether nested mode is enabled using the following precedence:
|
|
190
|
-
1. `
|
|
191
|
-
2. `nested = true` in `
|
|
184
|
+
1. `skiller apply --nested` (or `--no-nested`) takes top priority
|
|
185
|
+
2. `nested = true` in `skiller.toml`
|
|
192
186
|
3. Default to disabled when neither option is provided
|
|
193
|
-
- When a run is nested, downstream configs are forced to keep `nested = true`. If a child config attempts to disable it,
|
|
187
|
+
- When a run is nested, downstream configs are forced to keep `nested = true`. If a child config attempts to disable it, Skiller keeps nested processing active and emits a warning in the logs.
|
|
194
188
|
- Nested processing carries forward each directory's own MCP bundle and configuration settings so that generated files remain scoped to their source directories while being normalized back to the project root.
|
|
195
189
|
|
|
196
190
|
> [!CAUTION]
|
|
@@ -212,7 +206,7 @@ project/
|
|
|
212
206
|
- `project_architecture.md`
|
|
213
207
|
- `security_guidelines.md`
|
|
214
208
|
|
|
215
|
-
**Example rule file (`.
|
|
209
|
+
**Example rule file (`.claude/python_guidelines.md`):**
|
|
216
210
|
|
|
217
211
|
```markdown
|
|
218
212
|
# Python Project Guidelines
|
|
@@ -239,10 +233,10 @@ project/
|
|
|
239
233
|
### Primary Command
|
|
240
234
|
|
|
241
235
|
```bash
|
|
242
|
-
|
|
236
|
+
skiller apply [options]
|
|
243
237
|
```
|
|
244
238
|
|
|
245
|
-
The `apply` command looks for `.
|
|
239
|
+
The `apply` command looks for `.claude/` in the current directory tree, reading the first match. If no such directory is found, it will look for a global configuration in `$XDG_CONFIG_HOME/skiller`.
|
|
246
240
|
|
|
247
241
|
### Options
|
|
248
242
|
|
|
@@ -250,7 +244,7 @@ The `apply` command looks for `.ruler/` in the current directory tree, reading t
|
|
|
250
244
|
| ------------------------------ | ---------------------------------------------------------------------- |
|
|
251
245
|
| `--project-root <path>` | Project root path (default: current directory). |
|
|
252
246
|
| `--agents <agent1,agent2,...>` | Comma-separated agent names to target (see supported list below). |
|
|
253
|
-
| `--config <path>` | Custom `
|
|
247
|
+
| `--config <path>` | Custom `skiller.toml` path. |
|
|
254
248
|
| `--mcp` / `--with-mcp` | Enable applying MCP server configurations (default: true). |
|
|
255
249
|
| `--no-mcp` | Disable applying MCP server configurations. |
|
|
256
250
|
| `--mcp-overwrite` | Overwrite native MCP config instead of merging. |
|
|
@@ -268,74 +262,74 @@ The `apply` command looks for `.ruler/` in the current directory tree, reading t
|
|
|
268
262
|
**Apply rules to all configured agents:**
|
|
269
263
|
|
|
270
264
|
```bash
|
|
271
|
-
|
|
265
|
+
skiller apply
|
|
272
266
|
```
|
|
273
267
|
|
|
274
268
|
**Apply rules only to GitHub Copilot and Claude:**
|
|
275
269
|
|
|
276
270
|
```bash
|
|
277
|
-
|
|
271
|
+
skiller apply --agents copilot,claude
|
|
278
272
|
```
|
|
279
273
|
|
|
280
274
|
**Apply rules only to Firebase Studio:**
|
|
281
275
|
|
|
282
276
|
```bash
|
|
283
|
-
|
|
277
|
+
skiller apply --agents firebase
|
|
284
278
|
```
|
|
285
279
|
|
|
286
280
|
**Apply rules only to Warp:**
|
|
287
281
|
|
|
288
282
|
```bash
|
|
289
|
-
|
|
283
|
+
skiller apply --agents warp
|
|
290
284
|
```
|
|
291
285
|
|
|
292
286
|
**Apply rules only to Trae AI:**
|
|
293
287
|
|
|
294
288
|
```bash
|
|
295
|
-
|
|
289
|
+
skiller apply --agents trae
|
|
296
290
|
```
|
|
297
291
|
|
|
298
292
|
**Apply rules only to RooCode:**
|
|
299
293
|
|
|
300
294
|
```bash
|
|
301
|
-
|
|
295
|
+
skiller apply --agents roo
|
|
302
296
|
```
|
|
303
297
|
|
|
304
298
|
**Use a specific configuration file:**
|
|
305
299
|
|
|
306
300
|
```bash
|
|
307
|
-
|
|
301
|
+
skiller apply --config ./team-configs/skiller.frontend.toml
|
|
308
302
|
```
|
|
309
303
|
|
|
310
304
|
**Apply rules with verbose output:**
|
|
311
305
|
|
|
312
306
|
```bash
|
|
313
|
-
|
|
307
|
+
skiller apply --verbose
|
|
314
308
|
```
|
|
315
309
|
|
|
316
310
|
**Apply rules but skip MCP and .gitignore updates:**
|
|
317
311
|
|
|
318
312
|
```bash
|
|
319
|
-
|
|
313
|
+
skiller apply --no-mcp --no-gitignore
|
|
320
314
|
```
|
|
321
315
|
|
|
322
316
|
## Usage: The `revert` Command
|
|
323
317
|
|
|
324
|
-
The `revert` command safely undoes all changes made by `
|
|
318
|
+
The `revert` command safely undoes all changes made by `skiller apply`, restoring your project to its pre-skiller state. It intelligently restores files from backups (`.bak` files) when available, or removes generated files that didn't exist before.
|
|
325
319
|
|
|
326
320
|
### Why Revert is Needed
|
|
327
321
|
|
|
328
322
|
When experimenting with different rule configurations or switching between projects, you may want to:
|
|
329
323
|
|
|
330
|
-
- **Clean slate**: Remove all
|
|
324
|
+
- **Clean slate**: Remove all skiller-generated files to start fresh
|
|
331
325
|
- **Restore originals**: Revert modified files back to their original state
|
|
332
326
|
- **Selective cleanup**: Remove configurations for specific agents only
|
|
333
|
-
- **Safe experimentation**: Try
|
|
327
|
+
- **Safe experimentation**: Try skiller without fear of permanent changes
|
|
334
328
|
|
|
335
329
|
### Primary Command
|
|
336
330
|
|
|
337
331
|
```bash
|
|
338
|
-
|
|
332
|
+
skiller revert [options]
|
|
339
333
|
```
|
|
340
334
|
|
|
341
335
|
### Options
|
|
@@ -344,49 +338,49 @@ ruler revert [options]
|
|
|
344
338
|
| ------------------------------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
345
339
|
| `--project-root <path>` | Path to your project's root (default: current directory) |
|
|
346
340
|
| `--agents <agent1,agent2,...>` | Comma-separated list of agent names to revert (agentsmd, aider, amazonqcli, amp, augmentcode, claude, cline, codex, copilot, crush, cursor, firebase, firebender, gemini-cli, goose, jules, junie, kilocode, kiro, opencode, openhands, qwen, roo, trae, warp, windsurf, zed) |
|
|
347
|
-
| `--config <path>` | Path to a custom `
|
|
341
|
+
| `--config <path>` | Path to a custom `skiller.toml` configuration file |
|
|
348
342
|
| `--keep-backups` | Keep backup files (.bak) after restoration (default: false) |
|
|
349
343
|
| `--dry-run` | Preview changes without actually reverting files |
|
|
350
344
|
| `--verbose` / `-v` | Display detailed output during execution |
|
|
351
|
-
| `--local-only` | Only search for local .
|
|
345
|
+
| `--local-only` | Only search for local .claude directories, ignore global config |
|
|
352
346
|
|
|
353
347
|
### Common Examples
|
|
354
348
|
|
|
355
|
-
**Revert all
|
|
349
|
+
**Revert all skiller changes:**
|
|
356
350
|
|
|
357
351
|
```bash
|
|
358
|
-
|
|
352
|
+
skiller revert
|
|
359
353
|
```
|
|
360
354
|
|
|
361
355
|
**Preview what would be reverted (dry-run):**
|
|
362
356
|
|
|
363
357
|
```bash
|
|
364
|
-
|
|
358
|
+
skiller revert --dry-run
|
|
365
359
|
```
|
|
366
360
|
|
|
367
361
|
**Revert only specific agents:**
|
|
368
362
|
|
|
369
363
|
```bash
|
|
370
|
-
|
|
364
|
+
skiller revert --agents claude,copilot
|
|
371
365
|
```
|
|
372
366
|
|
|
373
367
|
**Revert with detailed output:**
|
|
374
368
|
|
|
375
369
|
```bash
|
|
376
|
-
|
|
370
|
+
skiller revert --verbose
|
|
377
371
|
```
|
|
378
372
|
|
|
379
373
|
**Keep backup files after reverting:**
|
|
380
374
|
|
|
381
375
|
```bash
|
|
382
|
-
|
|
376
|
+
skiller revert --keep-backups
|
|
383
377
|
```
|
|
384
378
|
|
|
385
|
-
## Configuration (`
|
|
379
|
+
## Configuration (`skiller.toml`) in Detail
|
|
386
380
|
|
|
387
381
|
### Location
|
|
388
382
|
|
|
389
|
-
Defaults to `.
|
|
383
|
+
Defaults to `.claude/skiller.toml` in the project root. Override with `--config` CLI option.
|
|
390
384
|
|
|
391
385
|
### Complete Example
|
|
392
386
|
|
|
@@ -476,7 +470,7 @@ enabled = false
|
|
|
476
470
|
|
|
477
471
|
[agents.kilocode]
|
|
478
472
|
enabled = true
|
|
479
|
-
output_path = ".kilocode/rules/
|
|
473
|
+
output_path = ".kilocode/rules/skiller_kilocode_instructions.md"
|
|
480
474
|
|
|
481
475
|
[agents.warp]
|
|
482
476
|
enabled = true
|
|
@@ -486,16 +480,16 @@ output_path = "WARP.md"
|
|
|
486
480
|
### Configuration Precedence
|
|
487
481
|
|
|
488
482
|
1. **CLI flags** (e.g., `--agents`, `--no-mcp`, `--mcp-overwrite`, `--no-gitignore`)
|
|
489
|
-
2. **Settings in `
|
|
490
|
-
3. **
|
|
483
|
+
2. **Settings in `skiller.toml`** (`default_agents`, specific agent settings, global sections)
|
|
484
|
+
3. **Skiller's built-in defaults** (all agents enabled, standard output paths, MCP enabled with 'merge')
|
|
491
485
|
|
|
492
486
|
## MCP (Model Context Protocol) Server Configuration
|
|
493
487
|
|
|
494
|
-
MCP provides broader context to AI models through server configurations.
|
|
488
|
+
MCP provides broader context to AI models through server configurations. Skiller can manage and distribute these settings across compatible agents.
|
|
495
489
|
|
|
496
490
|
### TOML Configuration (Recommended)
|
|
497
491
|
|
|
498
|
-
You can now define MCP servers directly in `
|
|
492
|
+
You can now define MCP servers directly in `skiller.toml` using the `[mcp_servers.<name>]` syntax:
|
|
499
493
|
|
|
500
494
|
```toml
|
|
501
495
|
# Global MCP behavior
|
|
@@ -551,9 +545,9 @@ url = "https://api.example.com"
|
|
|
551
545
|
Authorization = "Bearer token"
|
|
552
546
|
```
|
|
553
547
|
|
|
554
|
-
|
|
548
|
+
Skiller uses this configuration with the `merge` (default) or `overwrite` strategy, controlled by `skiller.toml` or CLI flags.
|
|
555
549
|
|
|
556
|
-
**Home Directory Safety:**
|
|
550
|
+
**Home Directory Safety:** Skiller never writes MCP configuration files outside your project root. Any historical references to user home directories (e.g. `~/.codeium/windsurf/mcp_config.json` or `~/.zed/settings.json`) have been removed; only project-local paths are targeted.
|
|
557
551
|
|
|
558
552
|
**Note for OpenAI Codex CLI:** To apply the local Codex CLI MCP configuration, set the `CODEX_HOME` environment variable to your project’s `.codex` directory:
|
|
559
553
|
|
|
@@ -565,11 +559,11 @@ export CODEX_HOME="$(pwd)/.codex"
|
|
|
565
559
|
|
|
566
560
|
**⚠️ Experimental Feature**: Skills support is currently experimental and requires `uv` (the Python package manager) to be installed on your system for MCP-based agent integration.
|
|
567
561
|
|
|
568
|
-
|
|
562
|
+
Skiller can manage and propagate Claude Code-compatible skills to supported AI agents. Skills are stored in `.claude/skills/` and are automatically distributed to compatible agents when you run `skiller apply`.
|
|
569
563
|
|
|
570
564
|
### How It Works
|
|
571
565
|
|
|
572
|
-
Skills are specialized knowledge packages that extend AI agent capabilities with domain-specific expertise, workflows, or tool integrations.
|
|
566
|
+
Skills are specialized knowledge packages that extend AI agent capabilities with domain-specific expertise, workflows, or tool integrations. Skiller discovers skills in your `.claude/skills/` directory and propagates them to compatible agents:
|
|
573
567
|
|
|
574
568
|
- **Claude Code**: Skills copied to `.claude/skills/` with @filename references preserved
|
|
575
569
|
- **Cursor**: Uses `.cursor/rules/` directly (copied when `merge_strategy = "cursor"`), no skillz MCP needed
|
|
@@ -580,7 +574,7 @@ Skills are specialized knowledge packages that extend AI agent capabilities with
|
|
|
580
574
|
Skills can be organized flat or nested:
|
|
581
575
|
|
|
582
576
|
```
|
|
583
|
-
.
|
|
577
|
+
.claude/skills/
|
|
584
578
|
├── my-skill/
|
|
585
579
|
│ ├── SKILL.md # Required: skill instructions/knowledge
|
|
586
580
|
│ ├── helper.py # Optional: additional resources (scripts)
|
|
@@ -622,15 +616,17 @@ When using `[skills].generate_from_rules = true`, skills are automatically creat
|
|
|
622
616
|
```
|
|
623
617
|
|
|
624
618
|
**Requirements for folder copying**:
|
|
619
|
+
|
|
625
620
|
- The `.mdc` file must be in a folder with the same basename (e.g., `docx/docx.mdc`)
|
|
626
621
|
- The `.mdc` file must have frontmatter with `alwaysApply: false` (or undefined)
|
|
627
622
|
- All files and subdirectories in that folder (except the `.mdc` file itself) are copied
|
|
628
623
|
|
|
629
624
|
**Example `.mdc` file with frontmatter**:
|
|
625
|
+
|
|
630
626
|
```markdown
|
|
631
627
|
---
|
|
632
628
|
description: DOCX file processing utilities
|
|
633
|
-
globs: [
|
|
629
|
+
globs: ['**/*.docx']
|
|
634
630
|
alwaysApply: false
|
|
635
631
|
---
|
|
636
632
|
|
|
@@ -647,13 +643,13 @@ Skills support is **enabled by default** but can be controlled via:
|
|
|
647
643
|
|
|
648
644
|
```bash
|
|
649
645
|
# Enable skills (default)
|
|
650
|
-
|
|
646
|
+
skiller apply --skills
|
|
651
647
|
|
|
652
648
|
# Disable skills
|
|
653
|
-
|
|
649
|
+
skiller apply --no-skills
|
|
654
650
|
```
|
|
655
651
|
|
|
656
|
-
**Configuration in `
|
|
652
|
+
**Configuration in `skiller.toml`:**
|
|
657
653
|
|
|
658
654
|
```toml
|
|
659
655
|
[skills]
|
|
@@ -662,7 +658,7 @@ enabled = true # or false to disable
|
|
|
662
658
|
|
|
663
659
|
### Skillz MCP Server
|
|
664
660
|
|
|
665
|
-
For agents that support MCP but don't have native skills support (excluding Claude Code and Cursor),
|
|
661
|
+
For agents that support MCP but don't have native skills support (excluding Claude Code and Cursor), Skiller automatically:
|
|
666
662
|
|
|
667
663
|
1. Copies skills to `.skillz/` directory with @filename references expanded to full content
|
|
668
664
|
2. Strips frontmatter from referenced .mdc files to avoid duplication
|
|
@@ -681,13 +677,13 @@ args = ["skillz@latest", "/absolute/path/to/project/.skillz"]
|
|
|
681
677
|
|
|
682
678
|
### `.gitignore` Integration
|
|
683
679
|
|
|
684
|
-
When skills support is enabled and gitignore integration is active,
|
|
680
|
+
When skills support is enabled and gitignore integration is active, Skiller automatically adds:
|
|
685
681
|
|
|
686
|
-
- `.claude/skills/` (when generated from `.claude/rules/` or copied from `.
|
|
682
|
+
- `.claude/skills/` (when generated from `.claude/rules/` or copied from `.claude/skills/`)
|
|
687
683
|
- `.skillz/` (for MCP-based agents excluding Cursor)
|
|
688
684
|
- `.cursor/rules/` (when using `merge_strategy = "cursor"`)
|
|
689
685
|
|
|
690
|
-
to your `.gitignore` file within the managed
|
|
686
|
+
to your `.gitignore` file within the managed Skiller block.
|
|
691
687
|
|
|
692
688
|
**Note**: If you manually create `.claude/skills/` without `.claude/rules/`, it won't be gitignored (assumed to be versioned).
|
|
693
689
|
|
|
@@ -702,7 +698,7 @@ to your `.gitignore` file within the managed Ruler block.
|
|
|
702
698
|
|
|
703
699
|
### Validation
|
|
704
700
|
|
|
705
|
-
|
|
701
|
+
Skiller validates discovered skills and issues warnings for:
|
|
706
702
|
|
|
707
703
|
- Missing required file (`SKILL.md`)
|
|
708
704
|
- Invalid directory structures (directories without `SKILL.md` and no sub-skills)
|
|
@@ -714,7 +710,7 @@ Warnings don't prevent propagation but help identify potential issues.
|
|
|
714
710
|
Test skills propagation without making changes:
|
|
715
711
|
|
|
716
712
|
```bash
|
|
717
|
-
|
|
713
|
+
skiller apply --dry-run
|
|
718
714
|
```
|
|
719
715
|
|
|
720
716
|
This shows which skills would be copied and which MCP servers would be configured.
|
|
@@ -723,8 +719,8 @@ This shows which skills would be copied and which MCP servers would be configure
|
|
|
723
719
|
|
|
724
720
|
```bash
|
|
725
721
|
# 1. Add a skill to your project
|
|
726
|
-
mkdir -p .
|
|
727
|
-
cat > .
|
|
722
|
+
mkdir -p .claude/skills/my-skill
|
|
723
|
+
cat > .claude/skills/my-skill/SKILL.md << 'EOF'
|
|
728
724
|
# My Custom Skill
|
|
729
725
|
|
|
730
726
|
This skill provides specialized knowledge for...
|
|
@@ -738,7 +734,7 @@ When working on this project, always follow these guidelines:
|
|
|
738
734
|
EOF
|
|
739
735
|
|
|
740
736
|
# 2. Apply to all agents (skills enabled by default)
|
|
741
|
-
|
|
737
|
+
skiller apply
|
|
742
738
|
|
|
743
739
|
# 3. Skills are now available to compatible agents:
|
|
744
740
|
# - Claude Code: .claude/skills/my-skill/
|
|
@@ -747,12 +743,12 @@ ruler apply
|
|
|
747
743
|
|
|
748
744
|
## `.gitignore` Integration
|
|
749
745
|
|
|
750
|
-
|
|
746
|
+
Skiller automatically manages your `.gitignore` file to keep generated agent configuration files out of version control.
|
|
751
747
|
|
|
752
748
|
### How it Works
|
|
753
749
|
|
|
754
750
|
- Creates or updates `.gitignore` in your project root
|
|
755
|
-
- Adds paths to a managed block marked with `# START
|
|
751
|
+
- Adds paths to a managed block marked with `# START Skiller Generated Files` and `# END Skiller Generated Files`
|
|
756
752
|
- Preserves existing content outside this block
|
|
757
753
|
- Sorts paths alphabetically and uses relative POSIX-style paths
|
|
758
754
|
|
|
@@ -763,12 +759,12 @@ Ruler automatically manages your `.gitignore` file to keep generated agent confi
|
|
|
763
759
|
node_modules/
|
|
764
760
|
*.log
|
|
765
761
|
|
|
766
|
-
# START
|
|
762
|
+
# START Skiller Generated Files
|
|
767
763
|
.aider.conf.yml
|
|
768
764
|
.clinerules
|
|
769
765
|
AGENTS.md
|
|
770
766
|
CLAUDE.md
|
|
771
|
-
# END
|
|
767
|
+
# END Skiller Generated Files
|
|
772
768
|
|
|
773
769
|
dist/
|
|
774
770
|
```
|
|
@@ -776,7 +772,7 @@ dist/
|
|
|
776
772
|
### Control Options
|
|
777
773
|
|
|
778
774
|
- **CLI flags**: `--gitignore` or `--no-gitignore`
|
|
779
|
-
- **Configuration**: `[gitignore].enabled` in `
|
|
775
|
+
- **Configuration**: `[gitignore].enabled` in `skiller.toml`
|
|
780
776
|
- **Default**: enabled
|
|
781
777
|
|
|
782
778
|
## Practical Usage Scenarios
|
|
@@ -784,16 +780,16 @@ dist/
|
|
|
784
780
|
### Scenario 1: Getting Started Quickly
|
|
785
781
|
|
|
786
782
|
```bash
|
|
787
|
-
# Initialize
|
|
783
|
+
# Initialize Skiller in your project
|
|
788
784
|
cd your-project
|
|
789
|
-
|
|
785
|
+
skiller init
|
|
790
786
|
|
|
791
787
|
# Edit the generated files
|
|
792
|
-
# - Add your coding guidelines to .
|
|
793
|
-
# - Customize .
|
|
788
|
+
# - Add your coding guidelines to .claude/AGENTS.md (or keep adding additional .md files)
|
|
789
|
+
# - Customize .claude/skiller.toml if needed
|
|
794
790
|
|
|
795
791
|
# Apply rules to all AI agents
|
|
796
|
-
|
|
792
|
+
skiller apply
|
|
797
793
|
```
|
|
798
794
|
|
|
799
795
|
### Scenario 2: Complex Projects with Nested Rules
|
|
@@ -801,53 +797,53 @@ ruler apply
|
|
|
801
797
|
For large projects with multiple components or services, enable nested rule loading so each directory keeps its own rules and MCP bundle:
|
|
802
798
|
|
|
803
799
|
```bash
|
|
804
|
-
# Set up nested .
|
|
805
|
-
mkdir -p src/.
|
|
800
|
+
# Set up nested .claude directories
|
|
801
|
+
mkdir -p src/.claude tests/.claude docs/.claude
|
|
806
802
|
|
|
807
803
|
# Add component-specific instructions
|
|
808
|
-
echo "# API Design Guidelines" > src/.
|
|
809
|
-
echo "# Testing Best Practices" > tests/.
|
|
810
|
-
echo "# Documentation Standards" > docs/.
|
|
804
|
+
echo "# API Design Guidelines" > src/.claude/api_rules.md
|
|
805
|
+
echo "# Testing Best Practices" > tests/.claude/test_rules.md
|
|
806
|
+
echo "# Documentation Standards" > docs/.claude/docs_rules.md
|
|
811
807
|
```
|
|
812
808
|
|
|
813
809
|
```toml
|
|
814
|
-
# .
|
|
810
|
+
# .claude/skiller.toml
|
|
815
811
|
nested = true
|
|
816
812
|
```
|
|
817
813
|
|
|
818
814
|
```bash
|
|
819
|
-
# The CLI inherits nested mode from
|
|
820
|
-
|
|
815
|
+
# The CLI inherits nested mode from skiller.toml
|
|
816
|
+
skiller apply --verbose
|
|
821
817
|
|
|
822
818
|
# Override from the CLI at any time
|
|
823
|
-
|
|
819
|
+
skiller apply --no-nested
|
|
824
820
|
```
|
|
825
821
|
|
|
826
|
-
This creates context-specific instructions for different parts of your project while maintaining global rules in the root `.
|
|
822
|
+
This creates context-specific instructions for different parts of your project while maintaining global rules in the root `.claude/` directory. Nested runs automatically keep every nested config enabled even if a child tries to disable it.
|
|
827
823
|
|
|
828
824
|
> [!NOTE]
|
|
829
825
|
> The CLI prints "Nested mode is experimental and may change in future releases." the first time nested processing runs. Expect refinements in future versions.
|
|
830
826
|
|
|
831
827
|
### Scenario 3: Team Standardization
|
|
832
828
|
|
|
833
|
-
1. Create `.
|
|
834
|
-
2. Commit the `.
|
|
835
|
-
3. Team members pull changes and run `
|
|
829
|
+
1. Create `.claude/coding_standards.md`, `.claude/api_usage.md`
|
|
830
|
+
2. Commit the `.claude` directory to your repository
|
|
831
|
+
3. Team members pull changes and run `skiller apply` to update their local AI agent configurations
|
|
836
832
|
|
|
837
833
|
### Scenario 4: Project-Specific Context for AI
|
|
838
834
|
|
|
839
|
-
1. Detail your project's architecture in `.
|
|
840
|
-
2. Describe primary data structures in `.
|
|
841
|
-
3. Run `
|
|
835
|
+
1. Detail your project's architecture in `.claude/project_overview.md`
|
|
836
|
+
2. Describe primary data structures in `.claude/data_models.md`
|
|
837
|
+
3. Run `skiller apply` to help AI tools provide more relevant suggestions
|
|
842
838
|
|
|
843
839
|
### Integration with NPM Scripts
|
|
844
840
|
|
|
845
841
|
```json
|
|
846
842
|
{
|
|
847
843
|
"scripts": {
|
|
848
|
-
"
|
|
849
|
-
"dev": "npm run
|
|
850
|
-
"precommit": "npm run
|
|
844
|
+
"skiller:apply": "skiller apply",
|
|
845
|
+
"dev": "npm run skiller:apply && your_dev_command",
|
|
846
|
+
"precommit": "npm run skiller:apply"
|
|
851
847
|
}
|
|
852
848
|
}
|
|
853
849
|
```
|
|
@@ -855,14 +851,14 @@ This creates context-specific instructions for different parts of your project w
|
|
|
855
851
|
### Integration with GitHub Actions
|
|
856
852
|
|
|
857
853
|
```yaml
|
|
858
|
-
# .github/workflows/
|
|
859
|
-
name: Check
|
|
854
|
+
# .github/workflows/skiller-check.yml
|
|
855
|
+
name: Check Skiller Configuration
|
|
860
856
|
on:
|
|
861
857
|
pull_request:
|
|
862
|
-
paths: ['.
|
|
858
|
+
paths: ['.claude/**']
|
|
863
859
|
|
|
864
860
|
jobs:
|
|
865
|
-
check-
|
|
861
|
+
check-skiller:
|
|
866
862
|
runs-on: ubuntu-latest
|
|
867
863
|
steps:
|
|
868
864
|
- uses: actions/checkout@v4
|
|
@@ -871,17 +867,17 @@ jobs:
|
|
|
871
867
|
node-version: '18'
|
|
872
868
|
cache: 'npm'
|
|
873
869
|
|
|
874
|
-
- name: Install
|
|
875
|
-
run: npm install -g
|
|
870
|
+
- name: Install Skiller
|
|
871
|
+
run: npm install -g skiller
|
|
876
872
|
|
|
877
|
-
- name: Apply
|
|
878
|
-
run:
|
|
873
|
+
- name: Apply Skiller configuration
|
|
874
|
+
run: skiller apply --no-gitignore
|
|
879
875
|
|
|
880
876
|
- name: Check for uncommitted changes
|
|
881
877
|
run: |
|
|
882
878
|
if [[ -n $(git status --porcelain) ]]; then
|
|
883
|
-
echo "::error::
|
|
884
|
-
echo "Please run '
|
|
879
|
+
echo "::error::Skiller configuration is out of sync!"
|
|
880
|
+
echo "Please run 'skiller apply' locally and commit the changes."
|
|
885
881
|
exit 1
|
|
886
882
|
fi
|
|
887
883
|
```
|
|
@@ -892,8 +888,8 @@ jobs:
|
|
|
892
888
|
|
|
893
889
|
**"Cannot find module" errors:**
|
|
894
890
|
|
|
895
|
-
- Ensure
|
|
896
|
-
- Or use `npx @
|
|
891
|
+
- Ensure Skiller is installed globally: `npm install -g skiller`
|
|
892
|
+
- Or use `npx skiller@latest`
|
|
897
893
|
|
|
898
894
|
**Permission denied errors:**
|
|
899
895
|
|
|
@@ -901,13 +897,13 @@ jobs:
|
|
|
901
897
|
|
|
902
898
|
**Agent files not updating:**
|
|
903
899
|
|
|
904
|
-
- Check if the agent is enabled in `
|
|
900
|
+
- Check if the agent is enabled in `skiller.toml`
|
|
905
901
|
- Verify agent isn't excluded by `--agents` flag
|
|
906
902
|
- Use `--verbose` to see detailed execution logs
|
|
907
903
|
|
|
908
904
|
**Configuration validation errors:**
|
|
909
905
|
|
|
910
|
-
-
|
|
906
|
+
- Skiller now validates `skiller.toml` format and will show specific error details
|
|
911
907
|
- Check that all configuration values match the expected types and formats
|
|
912
908
|
|
|
913
909
|
### Debug Mode
|
|
@@ -915,7 +911,7 @@ jobs:
|
|
|
915
911
|
Use `--verbose` flag to see detailed execution logs:
|
|
916
912
|
|
|
917
913
|
```bash
|
|
918
|
-
|
|
914
|
+
skiller apply --verbose
|
|
919
915
|
```
|
|
920
916
|
|
|
921
917
|
This shows:
|
|
@@ -931,36 +927,36 @@ This shows:
|
|
|
931
927
|
A: Currently, all agents receive the same concatenated rules. For agent-specific instructions, include sections in your rule files like "## GitHub Copilot Specific" or "## Aider Configuration".
|
|
932
928
|
|
|
933
929
|
**Q: How do I set up different instructions for different parts of my project?**
|
|
934
|
-
A: Enable nested mode either by setting `nested = true` in `
|
|
930
|
+
A: Enable nested mode either by setting `nested = true` in `skiller.toml` or by passing `skiller apply --nested`. The CLI inherits the config setting by default, but `--no-nested` always wins if you need to opt out for a run. Nested mode keeps loading rules (and MCP settings) from every `.claude/` directory in the hierarchy, forces child configs to remain nested, and logs "Nested mode is experimental and may change in future releases." if any nested processing occurs.
|
|
935
931
|
|
|
936
|
-
**Q: How do I temporarily disable
|
|
937
|
-
A: Set `enabled = false` in `
|
|
932
|
+
**Q: How do I temporarily disable Skiller for an agent?**
|
|
933
|
+
A: Set `enabled = false` in `skiller.toml` under `[agents.agentname]`, or use `--agents` flag to specify only the agents you want.
|
|
938
934
|
|
|
939
935
|
**Q: What happens to my existing agent configuration files?**
|
|
940
|
-
A:
|
|
936
|
+
A: Skiller creates backups with `.bak` extension before overwriting any existing files.
|
|
941
937
|
|
|
942
|
-
**Q: Can I run
|
|
943
|
-
A: Yes! Use `
|
|
938
|
+
**Q: Can I run Skiller in CI/CD pipelines?**
|
|
939
|
+
A: Yes! Use `skiller apply --no-gitignore` in CI to avoid modifying `.gitignore`. See the GitHub Actions example above.
|
|
944
940
|
|
|
945
941
|
**Q: How does OpenHands MCP propagation classify servers?**
|
|
946
942
|
A: Local stdio servers become `stdio_servers`. Remote URLs containing `/sse` are classified as `sse_servers`; others become `shttp_servers`. Bearer tokens in an `Authorization` header are extracted into `api_key` where possible.
|
|
947
943
|
|
|
948
944
|
**Q: Where is Zed configuration written now?**
|
|
949
|
-
A:
|
|
945
|
+
A: Skiller writes a `settings.json` in the project root (not the user home dir) and transforms MCP server definitions to Zed's `context_servers` format including `source: "custom"`.
|
|
950
946
|
|
|
951
947
|
**Q: What changed about MCP initialization?**
|
|
952
|
-
A: `
|
|
948
|
+
A: `skiller init` now only adds example MCP server sections to `skiller.toml` instead of creating `.claude/mcp.json`. The JSON file is still consumed if present, but TOML servers win on name conflicts.
|
|
953
949
|
|
|
954
950
|
**Q: Is Kiro supported?**
|
|
955
|
-
A: Yes. Kiro receives concatenated rules at `.kiro/steering/
|
|
951
|
+
A: Yes. Kiro receives concatenated rules at `.kiro/steering/skiller_kiro_instructions.md`.
|
|
956
952
|
|
|
957
953
|
## Development
|
|
958
954
|
|
|
959
955
|
### Setup
|
|
960
956
|
|
|
961
957
|
```bash
|
|
962
|
-
git clone https://github.com/udecode/
|
|
963
|
-
cd
|
|
958
|
+
git clone https://github.com/udecode/skiller.git
|
|
959
|
+
cd skiller
|
|
964
960
|
npm install
|
|
965
961
|
npm run build
|
|
966
962
|
```
|