Cursor の Agent に「このリポジトリではこう動いてほしい」を伝える一番手軽な手段が AGENTS.md。プレーンな Markdown なのでチームでも読みやすい。
この記事では、書き方のベストプラクティスと、C# / ASP.NET Core 想定の具体例をまとめる。例として架空プロダクト OrderNest(受注 API + バックグラウンド処理)を使う。
AGENTS.md には「このプロジェクトは何か・どこにあるか・どう検証するか」を短く書く.cursor/rules/*.mdc へAGENTS.md は親と結合され、より具体が優先Cursor Cloud specific instructions を用意するプロジェクト(またはサブディレクトリ)に置く Agent 向け指示ファイル。frontmatter 不要の Markdown。.cursor/rules のシンプルな代替として公式に案内されている。
目安: 「何のリポジトリ?」→ AGENTS.md。「この層ではこう書け」→ rules。
dotnet / git など一般知識の羅列AGENTS.md や Skills / rules に逃がすOrderNest/
AGENTS.md # 全体
src/Api/AGENTS.md # API 固有
src/Workers/AGENTS.md # Worker 固有
tests/AGENTS.md # テスト固有(任意)
作業中ディレクトリの指示が親と結合され、より具体的な指示が優先される。
以降の例で使う架空プロダクト。
OrderNest/
├── AGENTS.md
├── OrderNest.sln
├── src/
│ ├── Api/
│ ├── Application/
│ ├── Domain/
│ ├── Infrastructure/
│ └── Workers/
└── tests/
├── Api.Tests/
└── Application.Tests/
OrderNest ルートに置く例。コピーして自プロジェクト名に差し替えれば使える。
# OrderNest — Agent Instructions
## Product
B2B 受注を扱う ASP.NET Core API と、通知・集計用 Worker。
UI は別リポジトリ。このリポジトリは API / Worker / ドメインのみ。
## Stack
- .NET 8 / C#
- ASP.NET Core Minimal APIs + Controllers 混在(新規は Minimal API 優先)
- EF Core + SQL Server
- xUnit / FluentAssertions / Testcontainers(統合テスト)
## Repo map
- `src/Api` … HTTP 入出力。薄い。ビジネス判断をここに書かない
- `src/Application` … ユースケース / バリデーション / DTO 変換
- `src/Domain` … エンティティとドメインルール。インフラ依存禁止
- `src/Infrastructure` … EF Core、外部 API、メール等
- `src/Workers` … キュー消費・定期処理
- `tests/*` … プロジェクト名に対応
## Commands
- 復元: `dotnet restore OrderNest.sln`
- ビルド: `dotnet build OrderNest.sln -c Release`
- 単体: `dotnet test tests/Application.Tests`
- 統合: `dotnet test tests/Api.Tests`(Docker 必須)
- API 起動: `dotnet run --project src/Api`
- Worker 起動: `dotnet run --project src/Workers`
## Invariants(破らない)
- 金額・税計算は Domain / Application。Api で再計算しない
- 個人情報・接続文字列をログに出さない
- 外部決済呼び出しは Infrastructure 経由のみ
- マイグレーション追加時は理由を PR 説明に書く
## Patterns to follow
- 新規ユースケースは `src/Application/Orders/` 配下の既存ハンドラを真似る
- 結果型は `Result<T>`(成功/失敗)。例外は想定外のみ
- DI 登録は `src/Infrastructure/DependencyInjection.cs`
## Do not
- Domain から EF Core / HttpClient を参照しない
- コントローラで DbContext を直接触らない
- 秘密情報を appsettings に直書きしない(User Secrets / 環境変数)
## PR expectations
- 関連テストを更新または追加
- `dotnet build` と関係テストが通る状態にする
# Api layer
## Scope
HTTP の入出力と認証・認可の配線だけを担当する。
## Prefer
- 新規エンドポイントは Minimal API(`src/Api/Endpoints/`)
- 入力検証の詳細は Application に委譲
- 問題レスポンスは既存の ProblemDetails ヘルパーを使う
## Avoid
- ここで業務ルールや税計算を実装しない
- エンドポイント内で EF Core を new / 直接利用しない
# Workers
## Scope
キューとスケジュール起動のホスト。再実行可能(idempotent)を優先。
## Prefer
- 1 メッセージ 1 ハンドラ
- 失敗はログ + 規定のリトライ。無限ループしない
- 長時間処理はキャンセルトークンを必ず繋ぐ
## Avoid
- UI / HTTP 向け DTO を Worker に持ち込まない
- ハンドラから他 Worker を直接 new しない
公式では見出し名として Cursor Cloud specific instructions が推奨されている。ルート AGENTS.md の末尾に足す例:
## Cursor Cloud specific instructions
### Environment
- .NET 8 SDK が使えること
- 統合テストは Docker が必要。使えない場合は Application.Tests のみ実行し、その旨を報告する
- DB 接続情報は Secrets / 環境変数。リポジトリ内のダミー接続文字を本番扱いしない
### Verify before finish
1. `dotnet restore OrderNest.sln`
2. `dotnet build OrderNest.sln -c Release`
3. `dotnet test tests/Application.Tests --no-build`
4. Docker 利用可なら `dotnet test tests/Api.Tests --no-build`
### Notes
- ローカル専用の VPN リソースには触れない
- 大きな手順(リリース手順など)は Skills 側を優先。ここには完了条件だけ書く
.cursor/rules/ef-core.mdc(globs で絞る).cursor/skills/order-debug/SKILL.mdAGENTS.md = Agent 向けのプロジェクト説明書(短く具体的に)まずはルートに1枚、OrderNest 例の見出しだけ埋めるところからで十分。繰り返し直させている指示が出てきたら、そのとき項目を足す。