投稿する

Lovart.ai/販売プラットフォーム連携により自律的に収益を上げるシステム

トレンド調査から商品デザイン生成、EC出品、SNS宣伝、売上分析までを8体の専門AIエージェントが完全自動で完結させる自律型収益システムです。Lovart.aiやSUZURI、Shopify等と連携し、人間の介入なしで24時間稼働するHOOTL(Human Out of The Loop)思想を体現しています。 各エージェントは実行結果を自己内省し、システム監視役がそのデータに基づいてエージェント自身の動作定義を日々アップデートします。これにより、市場の変化に合わせて戦略を自律的に改善し続ける、エンジニア向けの実験的かつ実用的な自動運転ストア運用基盤を提供します。
zip未取得

ACF — AI Creative Factory

Lovart.ai と販売プラットフォームを連携させ、完全自律で収益を上げる HOOTL (Human Out of The Loop) システム。

アーキテクチャ

[Marketing Hunter] → [AI Designer (Lovart.ai)] → [Legal Compliance]
                                                         ↓
[Data Analyst] ← [SNS Promoter] ← [Store Manager (BASE/SUZURI/Shopify)]
       ↑                                                 ↑
       └──────── [CTO Watchdog: 監視・修復・自律改善] ────┘

8つの専門エージェントが連携し、トレンド調査から画像生成・出品・SNS宣伝・分析まで自律稼働する。

各エージェントは実行のたびに内省を記録し、CTO Watchdog が自動でエージェント定義を改善する(HOOTL Learning)。

改善パッチは HOOTL Reviewer が独立審査し、承認されたものだけを適用する。

---

フォルダ構成

AICreativeFactory/
├── CLAUDE.md                    # CEOへの指示書(Claude Code自動読み込み)
├── main.py                      # エントリーポイント
├── pyproject.toml               # Python依存関係定義
├── uv.lock                      # 依存バージョン固定
├── skills-lock.json             # インストール済みスキルのバージョン固定
├── .env.example                 # 環境変数テンプレート(コミット用)
├── .env                         # 実際のAPIキー(gitignore済み)
├── .envrc                       # direnv用: .envを自動読み込み
├── .agents/
│   └── skills/
│       └── lovart-api/          # lovart-apiスキルの実体(agent_skill.py含む)
├── .claude/
│   ├── settings.json            # Claude Code権限設定
│   ├── agents/                  # サブエージェント定義(8体 — ポケモン個性つき薄いラッパー)
│   │   ├── 1_trend_hunter.md    # ケンタロス: skills=trends-research
│   │   ├── 2_ai_designer.md     # ドーブル:   skills=lovart-design
│   │   ├── 3_legal_compliance.md# フーディン: skills=legal-review
│   │   ├── 4_store_manager.md   # カイリキー: skills=store-publish
│   │   ├── 5_sns_promoter.md    # ピジョット: skills=sns-post
│   │   ├── 6_data_analyst.md    # レアコイル: skills=analytics
│   │   ├── 7_cto_watchdog.md    # ミュウ:     skills=system-monitor
│   │   └── 8_hootl_reviewer.md  # ミュウツー: skills=hootl-review
│   ├── skills/                  # 再利用可能な手順書(<name>/SKILL.md 形式)
│   │   ├── agent-interfaces/    # エージェント間I/F仕様(DB状態遷移の設計図)
│   │   ├── db-operations/       # SQLite DB操作パターン
│   │   ├── logging/             # 構造化ログ出力モジュール
│   │   ├── reflection/          # 自己内省記録(5軸フォーマット)
│   │   ├── trends-research/     # トレンド調査手順 + confidence_score算出
│   │   ├── lovart-design/       # Lovart.ai操作・テーマ分解・品質評価
│   │   ├── legal-review/        # 3レイヤー審査・合否判定・禁止事項
│   │   ├── store-publish/       # SUZURI/BASE/Shopify出品ワークフロー
│   │   │   └── scripts/         # store_manager_list.py
│   │   ├── sns-post/            # SNS投稿手順(1実行=1ツイート)
│   │   │   └── scripts/         # post_to_x.py
│   │   ├── analytics/           # データ集計・意思決定支援ロジック
│   │   │   └── scripts/         # collect_analytics.py
│   │   ├── system-monitor/      # ヘルスチェック・自律修復・HOOTL Learning
│   │   ├── hootl-review/        # SKILL.mdパッチの独立レビュー(承認/却下)
│   │   └── lovart-api/          # Lovart APIスキル(外部シンボリックリンク)
│   ├── logs/                    # 実行ログ(gitignore済み)
│   ├── memory/                  # SQLite DB(gitignore済み)
│   └── plans/                   # 実行プラン・進捗ログ(gitignore済み)
├── scripts/                     # スタンドアロン実行スクリプト
│   ├── run-agent.sh             # エージェント個別実行(モデル自動選択)
│   ├── setup-cron.sh            # cronジョブ一括登録
│   ├── notify_discord.py        # Discord通知(reflectionをEmbed送信)
│   └── temp/                    # 一時スクリプト(gitignore済み)
├── src/
│   ├── init_db.py               # DB初期化スクリプト
│   └── test_generate.py         # 生成テスト
└── output/
    ├── designs/                 # 生成画像(gen/variant階層構造)
    │   └── {id}_{slug}/
    │       ├── selected.png     # 現在の最良バリアント
    │       ├── metadata.json    # コンセプト情報
    │       ├── gen1/            # 第1世代
    │       │   ├── prompt.txt
    │       │   ├── v1〜v4.png
    │       │   └── review.json
    │       └── gen2/            # 第2世代(法務差し戻し/品質改善時)
    │           ├── prompt.txt
    │           ├── v1〜v4.png
    │           └── review.json

---

自律改善ループ (HOOTL Learning)

各エージェント実行
      ↓
5軸で内省を DB reflections テーブルに保存
  ・what_done          何をやったか(客観的要約)
  ・result_full        実行結果の生データ(JSON)
  ・quality_check      品質基準への自己採点(0-100スコア)
  ・self_improvement   プロセス改善提案
  ・content_improvement 生成物の改善提案
      ↓
毎日22:00 CTO Watchdog がパターン検出 → SKILL.mdパッチ案を生成
      ↓
毎日23:00 HOOTL Reviewer が独立レビュー → 承認パッチを自動適用

---

cronスケジュール (JST)

パイプラインは 毎日2サイクル 稼働する。CTO Watchdog・HOOTL Reviewer は夜間に自律改善ループを実行する。

サイクルA(深夜)

時刻(JST)エージェント内容
01:001_trend_hunterトレンド調査
03:002_ai_designerデザイン生成(1 trend_data → 2テーマ × 2バリアント)
05:003_legal_compliance法務チェック
07:004_store_managerSUZURI/Shopify 出品
09:005_sns_promoterX投稿(post_to_x.py経由)

サイクルB(昼)

時刻(JST)エージェント内容
11:001_trend_hunterトレンド調査(2本目)
13:002_ai_designerデザイン生成(2本目)
15:003_legal_compliance法務チェック
17:004_store_manager出品
19:005_sns_promoterSNS投稿

毎日・夜間

時刻(JST)エージェント内容
21:006_data_analyst日次パフォーマンスレポート
22:007_cto_watchdogヘルスチェック・HOOTL Learning(SKILL.mdパッチ提案)
23:008_hootl_reviewerパッチの独立審査・承認済みパッチの自律適用

モデル選択方針

scripts/run-agent.sh は全エージェントを claude-sonnet-4-6 で実行する。

モデル対象エージェント理由
claude-sonnet-4-6全エージェント (1〜7)CLAUDE.md がsystem promptとして読み込まれるため、Haikuではエージェントロールを無視してCEOとして動作してしまう。Sonnetに統一することで確実に各エージェントの役割を実行する。

X投稿の段階的自動化

フェーズ方式切り替え条件
フェーズ1(現在)post_to_x.py 直接実行(固定テンプレート)—
フェーズ2run-agent.sh 5_sns_promoter(Claude生成)エンゲージメント率 < 1% が3週間 or 投稿数 > 20件

切り替えタイミングは CTO Watchdog が監視し、条件を満たしたら CEO に提言する。

手動実行:

bash scripts/run-agent.sh 1_trend_hunter

# X投稿(dry-run)
python3 scripts/post_to_x.py --dry-run

# X手動投稿後にDBへ記録
python3 scripts/post_to_x.py --mark-posted <asset_id>

---

セットアップ

1. リポジトリをクローン

git clone https://github.com/keita-labs/AICreativeFactory.git
cd AICreativeFactory

2. Python環境を構築

# uvをインストール(未導入の場合)
curl -LsSf https://astral.sh/uv/install.sh | sh

# 仮想環境を作成して依存をインストール
uv sync

3. 環境変数を設定

cp .env.example .env

.env を開いて各APIキーを記入する(詳細は後述)。

4. DBを初期化

uv run python src/init_db.py

5. lovart-api スキルをインストール

npx skills add lovartai/lovart-skill@lovart-api -y

インストール後、agent_skill.py をプロジェクトローカルにコピーする(必須):

cp ~/.claude/skills/lovart/skills/lovart-skill/agent_skill.py .agents/skills/lovart-api/agent_skill.py
なぜこのコピーが必要か
npx skills はスキルの実行ファイル(agent_skill.py)をグローバル(~/.claude/skills/lovart/)に置き、
プロジェクト内(./agents/skills/lovart-api/)にはSKILL.mdとREADMEだけを入れる構造になっている。
コピーしないと毎回グローバルを参照しに行くため、プロジェクトが自己完結しない。
スキルをアップデートした場合
npx skills add lovartai/lovart-skill@lovart-api -y を再実行したら、上記のコピーコマンドを再度実行すること。

---

環境変数一覧

AI画像生成(Lovart.ai)— 必須

変数名取得場所説明
LOVART_ACCESS_KEYhttps://lovart.ai → Settings → APIAPIアクセスキー
LOVART_SECRET_KEY同上APIシークレットキー

販売プラットフォーム

変数名取得場所
SUZURI_API_TOKENhttps://suzuri.jp → マイページ → API
BASE_API_KEY / BASE_API_SECREThttps://base.in → Apps → API
SHOPIFY_SHOP_DOMAIN / SHOPIFY_ACCESS_TOKENShopify管理画面 → アプリ → カスタムアプリ
PRINTFUL_API_KEYhttps://printful.com → Settings → API

SNS

変数名取得場所
X_API_KEY / X_API_SECRET / X_ACCESS_TOKEN / X_ACCESS_SECREThttps://developer.twitter.com
INSTAGRAM_ACCESS_TOKEN / INSTAGRAM_USER_IDMeta for Developers
FACEBOOK_PAGE_TOKEN / FACEBOOK_PAGE_ID同上
THREADS_ACCESS_TOKEN同上

Discord通知

変数名取得場所説明
DISCORD_WEBHOOK_SUMMARYサーバー設定 → 連携サービス → ウェブフック全エージェントの実行結果(自己内省)を送信
DISCORD_WEBHOOK_ERRORS同上実行失敗時のみ送信

各エージェント実行後、scripts/notify_discord.py が DBの reflections テーブルから最新の自己内省を読み込み、Discord Embed形式で通知する。

投稿者名はエージェント名(例: 🏪 store_manager)で表示される。post_to_x.py は cron から直接実行されるため、スクリプト末尾で notify_discord.py を subprocess 呼び出しして通知する。

データベース

変数名推奨値
ACF_DB_PATH.claude/memory/acf_main.db
ACF_LOG_DIR.claude/logs

---

DBスキーマ概要

テーブル主な用途
trend_dataMarketing Hunterが収集したトレンド情報(statusでAI Designerへ引き渡し)
assets生成デザイン(legal_statusでLegal Compliance→Store Managerへ引き渡し)
legal_reviewsLegal Complianceの審査結果
products出品済み商品とURL(sns_statusでSNS Promoterへ引き渡し)
sns_postsSNS投稿ログ(制御には使わない。純粋な記録用)
orders注文・売上データ
reflections各エージェントの自己内省(5軸)
tasks全タスクの実行ログ

エージェント間の引き渡しキー

エージェント間の通信はDBの状態変化のみで行う(直接通知禁止)。

カラム引き渡し元 → 引き渡し先値の意味
trend_data.statusMarketing Hunter → AI Designer'pending'=処理待ち
assets.legal_statusAI Designer → Legal Compliance'pending'=審査待ち
assets.legal_statusLegal Compliance → AI Designer'conditional'=再生成
assets.legal_statusLegal Compliance → Store Manager'approved'=出品OK
products.sns_statusStore Manager → SNS Promoter'queued'=投稿待ち

詳細は .claude/skills/agent-interfaces/SKILL.md を参照。

---

AI Designer テーマ生成

1回の実行で trend_data 1件から 2テーマ × 2バリアント を自律生成する。

テーマ分解アルゴリズム

trend_data 1件
  ↓
3次元クラスタリング
  top_keywords  → 上位2クラスタ(自然/有機系、都市/テック系 etc.)
  color_palette → 上位2グループ(暖色系 / クール系 etc.)
  design_styles → 2グループ(表現系 / 抽象系)
  ↓
2×2×2 = 8コンビネーション生成
  ↓
5軸スコアリング(トレンド適合30 + 市場新規性25 + 色彩凝集度20 + 奇抜ボーナス15 + 多様性ボーナス10)
  └ 直近20件と類似テーマは多様性ペナルティ(-15点)で自動抑制
  ↓
上位2テーマ × 2バリアント生成 → 各テーマの最良1枚を Legal Compliance へ

ベーステーマカテゴリ

カテゴリ例
動物猫・犬・うさぎ・狐・フクロウ・カワウソ etc.
自然・植物花束・苔・きのこ・桜・紅葉 etc.
宇宙・天体星空・月・銀河・オーロラ etc.
海・水波・クラゲ・深海魚・氷河 etc.
食べ物・スイーツパン・和菓子・フルーツ・たい焼き etc.
建築・空間路地・廃墟・温室・古民家 etc.
季節・行事夏祭り・紅葉・雪景色・七夕 etc.
都市・旅夜景・路面電車・灯台・古地図 etc.
昆虫・小動物蝶・ホタル・甲虫 etc.
音楽・アート楽器シルエット・カセットテープ・レコード盤 etc.

---

output/designs の構造

生成画像は コンセプト単位 で管理し、法務差し戻しや品質改善による再生成を 世代 (gen) として追跡する。

002_botanical-y2k/
  selected.png        ← 現在の最良バリアント(常に最新)
  metadata.json       ← コンセプト情報・選定履歴
  gen1/               ← 第1世代: 最初のプロンプト実行
    prompt.txt        ← 使用プロンプト(再現性のため保存)
    v1.png ~ v4.png   ← Lovartで生成した4バリアント
    review.json       ← 品質スコア・法務結果
  gen2/               ← 第2世代: 法務差し戻し後の再生成
    prompt.txt        ← "based_on: gen1/v2, reason: legal_rejection"
    v1.png ~ v4.png
    review.json       ← 法務APPROVED (score: 83)

---

lovart-api の使い方

Claude Codeから呼び出す(基本)

/lovart-api

または自然言語で話しかけるだけで自動的にスキルが起動する:

大自然で優雅に寝ているダックスフントを生成して

生成画像の保存先

すべての生成画像は output/designs/ に保存される。

agent_skill.py を直接呼ぶ場合は必ず --output-dir を指定:

python3 .agents/skills/lovart-api/agent_skill.py chat \
  --prompt "大自然で優雅に寝ているダックスフント" \
  --json --download \
  --output-dir output/designs/

---

ファイル管理ポリシー

パスgit管理理由
.envしないAPIキーが含まれるため
.claude/memory/しない実行時データ(再生成可能)
.claude/logs/しないログ(消えても困らない)
output/designs/しない画像バイナリ + デザインメタデータ(ビジネス戦略情報を含むため非公開)
uv.lockする環境の再現性のため
skills-lock.jsonするスキルバージョンの管理