kelly-writer について
Kelly Writer は、素材をチャネル別の編集可能な原稿に変換し、Busabase AirApp でレビューする App-in-Skill ワークフローです。人による承認と承認済み原稿のローカル出力に対応しますが、外部プラットフォームには公開しません。
主な機能
- 01複数チャネル向け原稿の生成
- 02AirApp でのレビュー・編集・承認
- 03Busabase での原稿とレビュー判断の保存
- 04承認済み原稿の Markdown・ZIP 出力
活用シーン
- 01ブログ記事を SNS やニュースレター向けに展開
- 02チャネル別原稿のレビューと修正
- 03承認済み原稿を後続の公開作業向けにまとめる
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ mr-kelly/ skills --skill kelly-writerインストール後、Claude Code で/kelly-writerを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
busabase.jsonagents/openai.yamlcontent/_folder.jsoncontent/drafts/base.jsonrecords.ndjsoncontent/kelly-writer-app/_node.json.busabaseignorepackage.jsoncontent/kelly-writer-app/app/accent-theme.cssaccent-theme.jsapp.jsbase-ui.cssdemo-visuals.cssdemo-visuals.jsindex.htmlstyles.csscontent/kelly-writer-app/app/i18n/messages.jscontent/kelly-writer-app/app/js/busabase-client.jsconfig.jsconnect-gate.jsdemo-visuals-data.jspagination.jsruntime.jswriter-model.jscontent/kelly-writer-app/app/js/providers/busabase-provider.jsdemo-provider.jsindex.jscontent/kelly-writer-app/app/styles/editorial.csscontent/kelly-writer-app/app/vendor/busabase-airapp-gate.cssbusabase-airapp-gate.js詳細
Kelly Writer
アプリ UI のスクリーンショット
![]() | ![]() |
| 概要 チャネル別の内訳と、次に対応が必要な下書き。 | 下書き チャネルに合わせた下書きのレビューデューキュー。タイトルと本文の編集、レビューコメント、承認コントロールを備えています。 |
概要
Kelly Writer は、Busabase Cloud の App-in-Skill です。標準のプロダクト画面は Busabase の AirApp であり、ローカルデータを扱う独立したプロダクトではありません。同じ Hono ソースを使い、明示的なリクエストに応じて、OAuth 接続の初期設定を伴うローカルプレビューを実行できます。このスキルを使うと、1 つのアイデア、ブログ記事、トランスクリプト、アウトライン、または製品発表をもとに、編集可能な複数チャネル向けのコンテンツ一式を作成できます。対象は、小紅書、WeChat、ニュースレター、LinkedIn、X/Twitter、ショート動画の台本、SEO 用スニペット、公式ブログの下書きです。
デフォルトの動作は AirApp 優先です。ユーザーが説明だけを明示的に求めた場合を除き、下書きを Busabase に直接生成し、クリック可能な AirApp の URL をユーザーに提示してください。localhost を起動するのは、ローカルプレビューやデバッグを明示的に求められた場合に限ります。localhost も同じ Busabase リソースを使用します。「纯聊天」、「chat only」、「不要打开 UI」など、ユーザーがチャットのみを希望した場合に限り、チャットのみのモードを使用してください。そのモードでは、番号付きの下書き(Draft #1)を提示し、会話内で承認を受けてください。
このスキルは App-in-Skill パターンの実装です。Codex/エージェントのスキルと、レビューおよび承認用の小規模なコンパニオン UI を組み合わせています。仕様書はこちらです:https://mr-kelly.github.io/research/app-in-skill-specification-for-pairing-agent-skills-with-a-local-companion-ui.pdf。
必須の依存関係
- プロダクトの動作、ビジュアル品質、レスポンシブレイアウト、および標準の
content/kelly-writer-app/成果物一式については、$kelly-app-skill-creatorを読み、従ってください。 - 接続、対象 Space、ノードの検出、ChangeRequests、レビュー、マージの動作については、
$busabaseを読み、従ってください。 - リソースのモデリング、AirApp のランタイム制限、セキュリティ、検証、デプロイについては、
$busabase-app-creatorを読み、従ってください。
依存関係を利用できない場合は、このスキルのローカル成果物とプロダクトの契約を維持し、利用できない Busabase 操作の直前で停止して、不足している依存関係を正確に報告してください。別のデータバックエンドを作り出してはいけません。
境界
- このスキルでは、ソースの中心的なアイデア、裏付けとなる根拠、例を抽出し、チャネルごとのバリエーションを作成して、すべてを Busabase に書き込むことができます。
- AirApp が読み書きするのは Busabase のレコードのみです。外部プラットフォームへの公開、投稿の予約、メディアのアップロード、その他の外部への副作用を行ってはいけません。また、コンテンツの生成やローカルへのエクスポートも行いません。これらは信頼されたスキルルートのスクリプトが担当します(下記参照)。
- エクスポートには必ず承認が必要です。
scripts/export_decisions.mjsはapprovedの下書きをローカルの Markdown+ZIP パックにまとめてdoneにしますが、どこにも公開しません。 - ソース素材と下書きはユーザーのコンテンツとして扱ってください。ソースに含まれていない成果、日付、顧客事例、統計、価格、法務・コンプライアンスに関する記述、推薦を決して作り出してはいけません。
Busabase リソース
1 つのアプリケーションフォルダー(kelly-writer)に 2 つの Base があり、content/kelly-writer-app/app/js/config.js と、content/ 配下の生成されたテンプレートサイドカーで宣言されています。
drafts:レビューキューです。チャネルの下書きごとに 1 件のレコードを持ちます(タイトル、本文、フック、CTA、ハッシュタグ、タイトル案、メディア概要、ソースメモ、リスク、正規アイデア、ソースの要約、エクスポート時のローカル画像パッケージングに使用するsource-draft-path)、ワークフローのstatus、および人間による判定フィールドdecision-note/decided-atを含みます。settings:kindごとに 1 行を持ちます。任意のkelly-writer-profile(ブランド、オーディエンス、公式 URL、CTA のデフォルト値、チャネルのデフォルト値、リスク用語、エクスポート設定)とkelly-writer-lockが含まれます。
リソースは、アプリが Space で初めて実行されるときに、冪等性のある Busabase ChangeRequest を通じて遅延プロビジョニングされます。メトリクスとチャネル別の内訳は、読み込みのたびにクライアント側で drafts Base から計算され、保存されることはありません。
このスキルの Busabase 導入前のローカルファイル形式にあったトピック発見/ToDo キュー/正規のメイン下書きのアイデア出しの各段階は、その形式の Busabase プロバイダーノートでもローカルのみで一時的なものでした(クライアント側で導出され、永続化されません)。この Busabase のみの形式では、永続化される作業単位であるチャネルごとの下書きレコードのみをレビューキューとして保持します。
ローカルアプリ
デフォルトの動作では AirApp を優先し、ユーザーにはクリック可能な AirApp URL を提示します。ローカルプレビュー/デバッグを明示的に求められた場合にのみ、pnpm --dir content/kelly-writer-app dev を実行します。
必須のアプリビュー(ハッシュルート):
#/overview:メトリクス(レビュー待ち/承認済み/完了/ブロック済み)、チャネル別の内訳、まだレビューが必要な上位の下書きを表示します。#/drafts:ワークフローの状態がneeds_review、to_approve、changes_requested、approved、done、blockedのチャネル下書きのレビューキューです。各項目には、安定した参照番号(#3)、チャネル/形式/ステータスのバッジ、編集可能なタイトルと本文、ハッシュタグ/CTA/メディア概要/タイトル案のサポートパネル、Review noteテキストエリア、および判定を下書きレコードに直接書き込む Approve/Request changes/Block ボタンを表示します。#/settings:サニタイズされた設定の概要です。ブランド/オーディエンス/トーン、設定済みチャネル、オンボーディングの状態、および次に実行する正確なnode scripts/generate_batch.mjs/node scripts/export_decisions.mjsコマンドを表示します。シークレットの値は決して公開しません。
デモモード:
?demo=1(または?demo=overview)を指定すると、ドキュメントやスクリーンショット用の決定論的なモックコンテンツバッチ(「ローカルファーストな AI ワークフローの実践的なローンチガイド」)が開きます。?demo=draftsと?demo=settingsを指定すると、名前付きのモックシーンを選択します。lang=enまたはlang=zhを指定すると、スクリーンショット用に UI の表示言語を固定できます。- デモモードでは Busabase の読み込みも書き込みも行いません。
UI 言語:英語と中国語の UI 表示に対応し、デフォルトは Auto にします。タイトル、フック、本文、ハッシュタグは元の言語のままにします。
レビューワークフロー
人間による判定(approve/request_changes/block/revise)では、新しい status と decision-note/decided-at を(approve または revise の場合は編集済みの title/body も)busabase-sdk を通じて下書きレコードに直接書き込みます。スタンドアロンのローカルプレビューでは、書き込みは直ちにマージされます(信頼されたオペレーター)。デプロイ済みの AirApp では、信頼されたプロセスがマージするための保留中の ChangeRequest が作成されます。
スクリプト
どちらのスクリプトも、独自の
package.json(busabase-sdk 依存関係)を持つ、信頼されたスキルルートの Node プロセスです。AirApp ブラウザーがこれらを実行することはなく、bases.createChangeRequest を呼び出したり、ローカルファイルを書き込んだりすることもありません。
node scripts/generate_batch.mjs --source <path-or-text> [--channels official_blog,xiaohongshu,wechat,newsletter,linkedin,x] [--audience "..."] [--cta "..."] [--source-draft-path <path>] [--apply]ソース(ファイルパスまたはインラインテキスト)を読み込み、チャネルごとの決定的な下書き作成ヒューリスティックを適用します(初稿のみ。Codex がその後、各下書きを判断を踏まえて改善する必要があります。レコードのtitle/bodyを編集するか、同じレコードに対する判断を通じて改善します)。チャネルごとに新しいdraftsレコードを 1 件ずつ Busabase に書き込みます。--applyを指定しない場合はドライランとなり、作成予定の下書きだけを出力します。node scripts/export_decisions.mjs [--apply] [--out <dir>]Busabase を再読み込みして、status: "approved"の下書きを取得します。それぞれを Markdown ファイル(タイトル/チャネル/形式/レビューコメント/本文/CTA/ハッシュタグ/メディア概要)と ZIP アーカイブ(Markdown と、元のソースの隣にあるローカル参照画像。source-draft-pathとKELLY_WRITER_CONTENT_ROOTを使って解決)にまとめ、スキルルートのexports/<batch-id>/に保存します。その後、各エクスポート済み下書きをdoneに更新します。--applyを指定しない場合はドライランとなり、エクスポート予定の内容だけを出力します。
通常のワークフロー
- モードを判定します。デフォルトは App UI です。
- ソース、対象読者、希望するチャネル、言語、CTA を確認するか、推測します。
node scripts/generate_batch.mjs --source ... --applyを実行して、チャネルごとの下書きの新しいバッチを Busabase に書き込みます。その後、各下書きのtitle/bodyを判断を踏まえて改善してから、バッチをユーザーに渡します(生成ツールのヒューリスティックは初稿です)。- 下書きを確認、編集、承認できるよう、AirApp の URL(またはローカルプレビュー URL)をユーザーに伝えます。
- 下書きが
changes_requestedに移された場合は、レビューコメントに沿って下書きを作り直し、needs_reviewに戻します。 - 「承認済みの下書きをエクスポートして」という指示を受けたら、
node scripts/export_decisions.mjs --applyを実行して、承認済みの下書きをすべてチャネル対応の ZIP パックにまとめてexports/に保存し、doneに更新します。このスキル自体がどこかに公開することはありません。エクスポートしたパックを公開用コネクターに渡すには、別途、明示的な許可が必要です。 - 明示的な
approveの判断なしに下書きをエクスポートしてはいけません。また、すでにdoneの下書きを再エクスポートしてはいけません。
コンテンツ生成ルール
- ソースの主張を維持します。成果、日付、顧客事例、統計、価格、法務/コンプライアンスに関する記述、推奨を捏造してはいけません。
- 必要な根拠、製品の詳細、スクリーンショット、リンク、ポリシー上の事実がソースにない場合は、質問するか、
needs_review/ブロック状態にします。 - プラットフォーム向けの調整と翻訳を分けて考えます。チャネル形式の変更は可能ですが、約束する内容を変えてはいけません。
- 汎用的で意欲をかき立てるだけの文章より、具体的な導入、詳細、読者にとっての利点を優先します。
- CTA とリンクは、設定プロファイルまたはユーザーの明示的な依頼に沿ったものにします。
- 中国語で作業する場合は、ソースまたはユーザーが別の言語を求めていない限り、自然な簡体字中国語をデフォルトで使用します。
- Xiaohongshu 向けには、スクロールの手を止めるタイトル、短く構成された本文、任意の画像/カルーセル概要、ハッシュタグ一式を作成します。
- ニュースレターや WeChat などの長文コンテンツに展開する場合は、ニュアンスと構成を維持し、アイデアをスローガンに縮めないようにします。
- 短いソーシャル投稿は、それぞれ単独で意味が通じるようにします。読者が元のブログを見ていることを前提にしてはいけません。
チャネル固有の形式を選択または調整する際は、
references/channel-playbook.md を参照してください。
安全に関するデフォルト設定
- エクスポートには承認が必要なものとして扱います。明示的な
approveの判断がない下書きは、scripts/export_decisions.mjsの対象にはなりません。 - レビューに必要な最小限の内容のみを保存します。下書きやログにはシークレットや Busabase の認証情報を含めないでください。
- 安定した ID(
draft_id、ref、batch_id)を維持し、更新やエクスポートを繰り返しても冪等になるようにします。
チャットのみのモード
ユーザーが UI を使わないよう求めた場合:
- 簡潔なチャネル計画を作成します。
- チャネル、タイトル/フック、本文、CTA、メモを含む番号付きの下書きを提示します。
- 承認または修正を求めます。
- 承認後、ユーザーがファイルを希望する場合は、
node scripts/export_decisions.mjs --applyを実行するか、承認済みの最終パックをローカルの Markdown に直接書き込みます。
ユーザーが公開コネクタを明示的に使用し、公開に成功した場合を除き、コンテンツが公開されたと主張してはいけません。

