Skip to content
Apothem
使い方

ルールの記述

Apothem の振る舞いのルールを作成し、スコープを定め、保守します。

ルールは、src/apothem/rules/ に置かれる、拡張子 .md の Markdown ファイルです。

ルールのフロントマター

---
name: "..."
description: "..."
pathFilter: ""            # empty string for always-on; a glob for path-filtered
alwaysApply: true         # true for always-on; false for path-filtered
---

ルールのスコープ

ルールのスコープは、二つのフロントマターフィールド alwaysApply と pathFilter によって設定されます:

alwaysApplypathFilter適用されるタイミング
true""(空)常時適用: すべてのセッション、すべてのファイル
false"**/*.py" のような globパスによる絞り込み: アクティブなファイルが glob に一致する場合のみ

同梱のルールのうち 5 つが常時適用です: agnostic-posture、authority-inquiry、session-closure、context-management、そしてルールインデックス。常時適用のルールはすべてのセッションでコンテキストを消費するため、新しいルールは、それが管理するファイルを指定する glob でパスによる絞り込みを行うべきです(SHOULD)。** だけのフィルターは何もスコープせず、Claude Code はそのルールを常時適用のルールと同様に起動時に読み込みます。同梱のコーパスは、常時適用の集合をこの一覧とバイト上限に収めています。常時適用に昇格させるルールは、同じ変更の中でその両方を変更します。追加する各ルールの名前はルールインデックス(apothem-rule-index)に記載してください。そうすれば、パスでルールをスコープしないハーネス上のセッションでもそのルールを見つけられます。コンパニオンルール(<parent>-<aspect>)は、親の pathFilter かそれより狭いものを使うため、親なしで読み込まれることはありません。自作のルールに apothem-rule-index という名前を付けないでください: インストールは、その名前のルールファイルをバックアップしてから上書きします。

ルールの例

---
name: "python-conventions"
description: "Python style conventions for this project"
pathFilter: "**/*.py"
alwaysApply: false
---

# Python conventions

- Use type annotations on all public functions.
- Maximum line length: 88 characters.
- Prefer explicit over implicit.

ルールをハーネスに適用する

ルールを書いた後は、インストール済みの各ハーネスアダプターを更新します。apothem harnesses list を実行して、インストール済みの一覧を確認し、ハーネスごとに一度ずつ update を呼び出してください:

apothem update --harness claude-code
apothem update --harness cursor --project /path/to/project

2 行目のように、プロジェクトスコープのハーネスは update に --project が必要です。ユーザースコープのハーネスには不要です。

ルールの検証

書いたルールファイルに対して frontmatter バリデーターを実行します。Apothem のチェックアウトからは、PYTHONPATH=src でパッケージをインポート可能にします。スクリプトでインストールした後は、その代わりに PYTHONPATH="$HOME/.apothem/src" を使います。

PYTHONPATH=src python -m apothem.conformity.gate --check frontmatter-grep src/apothem/rules/<rule>.md

frontmatter-grep のような書き込みごとのチェックは、チェック対象のファイルを受け取るか、--stdin で標準入力から内容を読み取ります。どちらも指定しない場合は標準入力からの入力を待ちます。スタンドアロンのチェックは、代わりにルートディレクトリを受け取ります(--check naming-grep . のように)。

On this page