mcpField
N
new-agent

new-agent

github.com/hachej開発160 回インストール3 日前に更新
リポジトリ

new-agent について

Boring app に機能を追加する開発スキルです。エージェント、ツール、ジョブ、チャット、ビュー、ページの定義や、マニフェストでの公開、変更の検証方法を説明します。

主な機能

  1. 01エージェントと出力契約の定義
  2. 02サンドボックスまたはサーバーツールの追加
  3. 03ジョブとチャットの構成
  4. 04ビューとページの登録
  5. 05テストと検証の実行

活用シーン

  1. 01アプリへのエージェント機能の追加
  2. 02ハブへのツール公開
  3. 03データに結び付くビューの作成

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/hachej/boring-stack --skill new-agent

インストール後、Claude Code で/new-agentを入力して読み込まれたか確認します。

詳細

Boring アプリに機能を追加する

アプリは機能プロバイダーです(hachej/boring-app)。機能フォルダーはすべて任意で、ハブが使用できる機能は boring.json で宣言します。**定義を追加し、ハブから呼び出せるようにする必要がある場合にのみ boring.json に追加してください。**宣言されていない定義は内部用です。アプリ内では動作しますが、マニフェストには含まれません。

どの機能を選ぶか

必要なもの作成するものboring.json の exposes に宣言するもの
契約を持つ単一のモデル呼び出しagents/<name>/agent.md(+ rules.md、tool.json)ハブから呼び出す場合は agents.<name>: "<one line>"
ライフサイクルを持つ複数のエージェント(複数の部分から結果を生成)agents/<name>/JOB.md + index.mjs(plan、collect)jobs.<name>
1つのエージェントと履歴を持つチャットagents/<name>/CHAT.md(+ 任意の index.mjs の context)chats.<name>
エージェントまたはハブが呼び出す純粋関数tools/<name>/tool.json(runtime: sandbox)+ tools/<name>/index.jstools.<name>: { runtime, description }
データベース、ネットワーク、またはシークレットが必要な関数tools/<name>/tool.json(runtime: server)+ server/src/tools/<name>.tstools.<name>
ハブが表示できるデータにバインドされたコンポーネントweb/src/views/<name>/index.tsx(+ web/src/main.tsx に登録)views.<name>: { shows, description }
アプリ独自の画面web/src/pages/<name>/index.tsxpages.<name>

ほとんどの機能はエージェントだけで実現できます。複数のエージェントをライフサイクルに沿って連携させる場合にのみジョブを追加し、複数のターンにわたって人がエージェントと会話する場合にのみチャットを追加してください。名前は agents/ 内で一意である必要があります。

エージェント

agents/<name>/
  agent.md     front matter + system prompt (the body)
  rules.md     the owner's rules, read-only in Settings; they change by pull request
  tool.json    only when output: tool: { name, description, input: JSON schema } (the output schema)
  index.mjs    optional: buildMessage(input), validate(output), asText(output); then the agent needs server/

agent.md のフロントマター:name(フォルダー名)、title、description、model(openai-codex/<model>)、effort、max_tokens、output(tool または markdown)、helper_tools: [<tool names>](宣言済みのツールのみ)、inputs:(name: { type, description, required })。

  • 宣言型(index.mjs なし):メッセージがルールと入力を定義します。Markdown 出力は空であってはならず、ツール出力には tool.json の必須フィールドが含まれている必要があります。ハブはファイルだけを使って実行できます。
  • コードあり:validate(output) は、保存前にランタイムが適用する契約です(APP-B4)。モデル宛てのメッセージとともに、agents/_shared/validate.mjs の fail("…") で拒否してください。
  • モックモデル(server/src/fake-models.ts)は Markdown エージェントに応答します。ツールエージェントにはスクリプト化された応答を追加してください。そうしないと、そのテストを実行できません。
  • Cloudflare アプリ(project.md の runtime: cloudflare)ではエージェントランタイムを実行しません。エージェントは宣言型のままにし、ハブで実行します。エージェントまたはチャットに index.mjs を置くことはできず、ジョブも使用できません。verify check はこれらを拒否します。

ツール

  • サンドボックス:tools/<name>/index.js で function run(input, ops) を定義します。インポート、Node API、ネットワーク API を使わないプレーンな JavaScript とし、tool.json の operations に記載された ops.<name> のみを使用します。それ以外は verify check によって拒否されます。
  • サーバー:server/src/tools/<name>.ts で handler(input, { db }) をエクスポートします。zod で入力を検証し、すべてのクエリを await してください(同じコードが SQLite と D1 の両方で実行されます)。Cloudflare アプリでは Node API を使用しません(worker-portable ルール)。
  • tool.json:description、runtime、input、output の JSON スキーマ。

データ、ルート、Web

  • テーブルを追加する場合:server/src/db/schema.ts を編集し、次に npm run db:generate を実行して、server/drizzle/ をコミットします(drizzle-kit push は決して使わないでください)。書き込み処理では、編集の基準にしたリビジョンを指定します(APP-B3。server/src/routes/memories.ts が例です)。
  • ルートを追加する場合:server/src/routes/<name>.ts(Hono + zValidator)を作成し、server/src/app.ts にマウントします。
  • Web からサーバーへのアクセスには、必ず web/src/lib/api.ts を使用します(呼び出しは web/src/lib/model.ts に記述します)。

テストと検証

  1. ユニットテスト(npm test):アプリを通したルートとツール (test/unit/app.test.mjs)、コードを持つエージェントの契約です。
  2. エンドツーエンドテスト(test/e2e/journey.spec.mjs):利用者が何か新しいものを目にするときに実施します。
  3. node scripts/verify.mjs check を実行し、その後 verify-app スキルを使って操作します。
  4. 機能マップ:利用者ができることを記した docs/verify/ 内のエリアファイルです。

禁止事項

  • 誤って何かを公開しないでください。公開するものは宣言し、それ以外は内部に留めてください。
  • ランタイムの外部からモデルを呼び出したり、サンドボックスツールにインポートを渡したりしないでください。
  • vendor/ を編集しないでください。

コメント