Communityコーディング&開発github.com

cristoferdomingues/BlackAgents

BlackAgents 機能構築のためのリファレンス — 階層化アーキテクチャ、App Router のページ/ルート規約、API エンベロープ + zod レシピ、lib/artifacts ドメイン、ワークスペースに閉じたファイルシステムパス。アプリの動作、API ルート、またはドメインロジックを追加・変更する際に参照。

BlackAgents とは?

BlackAgents App Patterns は、BlackAgents プロジェクトにおける機能開発のための包括的なリファレンスです。このスキルは、アプリケーションを UI(コンポーネント)、API ルート、ドメインロジック(lib/artifacts)、ファイルシステム(lib/fs-service)、ワークスペースフォルダの 5 層に分割する厳格なアーキテクチャを定義します。各層は明確な責務を持ち、例えばドメインロジックは React や Next.js に依存せず、HTTP 関連の処理は API ルートに限定されます。また、API ルートでは `ok` / `fail` 関数と `handle` ラッパーを用いた一貫したレスポンス形式と、zod による入力バリデーションが推奨されます。ファイルシステムへのアクセスはすべて `resolveInWorkspace` 関数を経由し、ワークスペース外へのパスエスケープを防止します。さらに、コマンド、エージェント、ルール、スキル間の相互参照を特定のマークダウン規約(太字やコードスパン)で表現することで、関係グラフの自動抽出を可能にします。このスキルは主に Claude Code, Cursor, Codex などの AI エージェント環境で使用され、開発者がアプリの動作を追加・変更する際に、正しいレイヤーにロジックを配置し、安全で一貫性のある実装を行うためのガイドラインを提供します。

対応✓Claude Code~Codex CLI✓Cursor
npx skills add https://github.com/cristoferdomingues/BlackAgents/tree/HEAD/.agents/skills/nextjs-app-patterns

Installed? Explore more コーディング&開発 skills: steipete/bluebubbles, steipete/eightctl, steipete/blucli · View all 6 →

お気に入りのAIに質問する

このエージェントスキルを事前に読み込んだ状態で新しいチャットを開きます。

ドキュメント

BlackAgents App Patterns

適用タイミング

app/**、app/api/**、または lib/** に触れる機能や修正を実装する際に読むこと。ハード制約は typescript-strict ルールと api-response-format ルールにあります。このファイルはレイヤーとレシピを説明します。

アーキテクチャ(レイヤーを尊重せよ)

UI (components/features/, client) ──fetch──▶ API routes (app/api/**/route.ts)
                                                    │  { success, data | error }
                                              Domain (lib/artifacts/, lib/standards/)
                                                    │  parse / serialize / graph
                                              Filesystem (lib/fs-service.ts)
                                                    │  resolveInWorkspace (no escape)
                                              Workspace folder (.cursor / .claude ...)

運用ルール:

  • 純粋でプラットフォームに依存しないロジックは lib/artifacts/** に配置する。React や next/server をインポートしてはならない。
  • HTTP 関連の処理は app/api/**/route.ts のみに記述する。
  • すべてのディスクアクセスは lib/fs-service.ts を経由する。ルートから直接 node:fs を呼び出してはならない。

App Router 規約

  • ページはデフォルトでサーバーコンポーネントとする。インタラクティブ性、状態、エフェクトが必要な場合のみ "use client" を追加する。
  • ルートグループ: /agents、/commands、/rules、/skills にはそれぞれ一覧ページ、[name] 編集ページ、new ページがあり、/new はガイド付きウィザード。その他のルート: /graph、/standards、/export、/sync、/chat、/providers、/settings。
  • クライアント機能コンポーネントは apiFetch (lib/api.ts) を介してフェッチし、アクティブなワークスペースの状態を WorkspaceProvider から読み取る。クライアント内で生の fetch や直接の設定読み取りを行ってはならない。

API ルートレシピ

import { ok, fail, handle } from "@/lib/api-response"
import { artifactInputSchema } from "@/lib/artifacts/schemas"

export async function POST(req: Request) {
  return handle(async () => {
    const parsed = artifactInputSchema.safeParse(await req.json())
    if (!parsed.success) return fail(parsed.error.issues[0].message, 400)
    // ...domain work via lib/artifacts + lib/fs-service...
    return ok({ /* data */ })
  })
}
  • 常に ok / fail で応答を返す。handle でラップすることで、スローされた例外が 500 エンベロープになるようにする。
  • ワークスペースルートは設定 (lib/config.ts) から読み取り、resolveInWorkspace(root, relPath) を使用する。
  • 秘密情報はサーバーサイドでのみ lib/secrets.ts で読み取る。認証情報がない場合は fail("...", 412) を返す。

ドメインモデル

lib/artifacts/:

  • types.ts — Artifact、ArtifactType、Platform、ArtifactFrontmatter(ツール非依存)。
  • layout.ts — PLATFORM_LAYOUTS + artifactRelPath() / artifactDeletePath()。プラットフォームのフォルダと拡張子を知る唯一の場所。ACTIVE_PLATFORMS = ["cursor", "claude"]、デフォルトは cursor。
  • parser.ts — scanWorkspace(root) と parseArtifact(gray-matter 使用)。スキルは <name>/SKILL.md ディレクトリとして再帰的に探索される。
  • serializer.ts — serializeArtifact(input) は frontmatter と本文を書き出す。ルールは name を省略(ファイル名で識別)。
  • schemas.ts — nameSchema(ケバブケース)、artifactInputSchema、normalizeExtra(タイプ別 frontmatter)。
  • graph.ts — オーサリング規約から相互参照を抽出する。

相互参照規約(グラフが読み取るもの)

元 → 先本文中の規約
コマンド → エージェントエージェント名(太字)
エージェント → ルール`ルール名` ルール
エージェント → スキル`スキル名` スキル
ルール → ルール関連ルール: a, b.
ルール → スキル関連項目: x スキル.

これらの正確な規約で本文を記述することで、関係グラフとアシスタントのリンク検出が機能するようになります。

ファイルシステムの安全性

export function resolveInWorkspace(root: string, relativePath: string): string {
  // relativePath を root の下で解決し、エスケープする場合は WorkspaceError をスローする
}

すべての読み書きは、この関数を介してワークスペース相対パスから構築されなければなりません。絶対パスを連結したり、クライアントから提供された絶対パスを受け入れたりしてはいけません。

ワークスペース外の永続化

  • ~/.black-agents/config.json — 保存されたワークスペース + アクティブな currentPath(lib/config.ts)。
  • ~/.black-agents/secrets.json — LLM キー、モード 0600、サーバーサイドのみ(lib/secrets.ts)。
  • <workspace>/.black-agents/standards.md — ワークスペースごとのオーサリング規約のオーバーライド。
  • 設定ディレクトリは BLACK_AGENTS_CONFIG_DIR でオーバーライド可能(テストで便利)。

使用方法

参照専用。ペルソナとワークフローは feature-developer エージェントにあり、ガードレールは typescript-strict ルールと api-response-format ルールにあります。このファイルを使用してロジックを適切なレイヤーに配置し、ルートレシピをコピーしてください。その後、UI は uiux-designer エージェントに、テストカバレッジは tester エージェントに委ねてください。

関連スキル