
こんにちは、エンジニアの鈴木です。
この記事では Cursor の Rules や Commands をまとめる入れ物として Agent Skills を使う方法を紹介します。この方法を使うことで以下のメリットがあります。
- スキルに強く関連した Rules や Commands をプロジェクト全体のノイズにしない
- スキルを物理的にポータブルにする (SKILL.md をコピーするだけでスキルを持ち運べる)
前提: Agent Skills とは
Agent Skills とは、フロントエンドの開発、PDF ファイルの操作、アプリケーションのテストなどの専門知識 (その領域の作業をするとき以外はコンテキストに載せる必要のない知識) を AGENTS.md から分割したものです。Agent Skills は AI エージェントが必要と判断したときだけ読み込まれるため、全ての知識を AGENTS.md に記述する場合と比較してコンテキストの消費を抑えることができます。
課題: 利用頻度が低い Rules や Commands がノイズになる
Cursor Rules (AI エージェントに守ってほしいルール) や Cursor Commands (特定のタスクを /command-name 形式で呼び出せるようにしたもの) は AI エージェントの動作を制御するために便利な仕組みです。
一方で Commands や Rules の量が増えてくると、利用頻度の低いものや特定のスキルでしか使わないようなものが出てきます。すると次の課題が発生します。
- Rules や Commands のファイルが多くなりすぎて把握しづらくなる
- Commands を実行するときの選択肢に毎回表示されてノイズになる
解決: Rules や Commands を Agent Skills にまとめる
先述の通り、Agent Skills とは、フロントエンドの開発、PDF ファイルの操作、アプリケーションのテストなどの専門知識 (その領域の作業をするとき以外はコンテキストに載せる必要のない知識) を AGENTS.md から分割したものです。
そこで、Agent Skills を Rules や Commands をまとめる入れ物として使います。SKILL.md はメタデータ部分 (先頭に YAML 形式で書く部分) 以外の書き方に決まりはありません。そこで、そのスキルだけに適用したい Rules や Commands を SKILL.md の中に書いてしまいます。
具体例: 挨拶するスキル
例として挨拶するスキルを作成します。
---
name: hello
description: |
挨拶するスキル
このスキルは "/hello" で実行する
このスキルは明示的に指定された場合のみ実行する
---
# hello
## Rules
### chat.default-skill-rule
* 明示的な指示がない場合は "help" を実行する
### chat.simple-talk-rule
* 実行結果だけを表示する
* 実行結果以外を表示しない
### chat.numbered-options-rule
* 選択肢をリストで提示するときは番号付きリストで表示する
* 選択肢をテーブルで提示するときは先頭に "No." 列を含める
## Skills
### help (スキルの使い方を表示する)
1. "Skills" セクションに含まれるスキル一覧をテーブル形式で表示する
- "説明" 列には見出しに含まれる説明を表示する
### good-morning (朝の挨拶を表示する)
1. /log "START 朝の挨拶"
2. 朝の挨拶を表示する
3. /log "FINISH 朝の挨拶"
### good-afternoon (昼の挨拶を表示する)
1. /log "START 昼の挨拶"
2. 昼の挨拶を表示する
3. /log "FINISH 昼の挨拶"
### good-evening (夜の挨拶を表示する)
1. /log "START 夜の挨拶"
2. 夜の挨拶を表示する
3. /log "FINISH 夜の挨拶"
## Commands
### /log TEXT
1. `log.txt` に指定されたテキストを記録する
- フォーマット: "${timestamp} ${TEXT}"
実行すると次のようにスキル一覧が表示されます(人間が実行したいスキルを明示的に指定するスタイルにしました)。

次に実行したいスキルを指定します。SKILL.md の Rules セクションに書いている chat.numbered-options-rule の効果で "No." 列が付加されるため、実行したいスキルを番号で指定することができます。

以下が SKILL.md を書くときのポイントです。
- ポイント 1: description に自動実行しないことを明記する
- ポイント 2: Rules, Skills, Commands セクションに分ける
- ポイント 3: デフォルトでスキルの説明を表示する
ポイント 1: description に自動実行しないことを明記する
description を以下のようにすることで、明示的に指定した場合だけスキルが実行されるように指示します。
---
name: hello
description: |
挨拶するスキル
このスキルは "/hello" で実行する
このスキルは明示的に指定された場合のみ実行する
---
...
ポイント 2: Rules, Skills, Commands セクションに分ける
以下のように SKILL.md を Rules, Skills, Commands セクションに分けて記述します。
--- name: ... description: ... --- # hello ... ## Rules ... ## Skills ... ## Commands ...
ポイント 3: デフォルトでスキルの説明を表示する
Rules セクションの chat.default-skill-rule によって明示的な指示がない場合に "help" を実行させます。そして、Skills セクションの help でスキル一覧をテーブル形式で表示させています。スキルの種類によっては、このように明示的に実行するものを選択するスタイルが使いやすいです。
...
## Rules
### chat.default-skill-rule
* 明示的な指示がない場合は "help" を実行する。
...
## Skills
### help (スキルの使い方を表示する)
1. "Skills" セクションに含まれるスキル一覧をテーブル形式で表示する
- "説明" 列には見出しに含まれる説明を表示する
...
発展例: Linux コマンドのようにオプションを指定できるようにする
SKILL.md に Rules や Commands を書くと適用されるのは、そういう決まりがあるからではなく、AI エージェントが上手く解釈してくれることが多いというだけです。言い方を変えると Rules や Commands 以外の概念で Agent Skills を制御することも可能です。
例として Linux コマンドのようにオプションを指定できるようにしてみます。以下のように SKILL.md を記述することで /hello good-morning --repeat 3 --dry-run のように実行することができます。
... ## Options * "-n", "--dry-run" - 実際に実行しない - どのような条件でどのような作業を実行することになるか説明する * "-r N", "--repeat N" - 指示を N 回繰り返す ...
SKILL.md 全体は以下です。
---
name: hello
description: |
挨拶するスキル
このスキルは "/hello" で実行する
このスキルは明示的に指定された場合のみ実行する
---
# hello
## Rules
### chat.default-skill-rule
* 明示的な指示がない場合は "help" を実行する
### chat.numbered-options-rule
* 選択肢をリストで提示するときは番号付きリストで表示する
* 選択肢をテーブルで提示するときは先頭に "No." 列を含める
## Options
* "-n", "--dry-run"
- 実際に実行しない
- どのような条件でどのような作業を実行することになるか説明する
* "-r N", "--repeat N"
- 指示を N 回繰り返す
## Skills
### help (スキルの使い方を表示する)
1. "Skills" セクションに含まれるスキル一覧をテーブル形式で表示する
- "説明" 列には見出しに含まれる説明を表示する
### good-morning (朝の挨拶を表示する)
1. /log "START 朝の挨拶"
2. 朝の挨拶を表示する
3. /log "FINISH 朝の挨拶"
### good-afternoon (昼の挨拶を表示する)
1. /log "START 昼の挨拶"
2. 昼の挨拶を表示する
3. /log "FINISH 昼の挨拶"
### good-evening (夜の挨拶を表示する)
1. /log "START 夜の挨拶"
2. 夜の挨拶を表示する
3. /log "FINISH 夜の挨拶"
## Commands
### /log TEXT
1. `log.txt` に指定されたテキストを記録する
- フォーマット: "${timestamp} ${TEXT}"
実行してみます。SKILL.md の中に書いている通りですが、--repeat 3 は「指示を 3 回繰り返す」、--dry-run は「実際に実行せずにどのような内容が実行されるか表示する」という意味です。

--dry-run オプションを外して実行します。

Linux コマンドのようにオプションで動作を細かく制御することができました。
終わりに
今回は Agent Skills を Rules や Commands などをまとめる入れ物とする使い方をしてみました。Cursor に限らず AI エージェントはさまざまな機能を提供しています。それぞれ用途の違いはありますが自由度が高いものばかりです。アイディア次第で他にも面白い使い方ができるはずなので、いろいろ試行錯誤してみましょう!



www.yayoi-kk.co.jp
弥生のエンジニアに関するnote記事もご覧ください。
note.yayoi-kk.co.jp