ECサイト自動運営システム
輸入無在庫販売ECの24時間完全無人運営を実現する、HOOTL(Human Out of The Loop)準拠の自律型エージェントシステムです。商品発掘から著作権審査、商品説明文の生成・校閲、価格最適化、出品、顧客対応まで、一連の運営フローを12種の専門エージェントが連鎖的に実行します。
特徴は、AI自身が運営データを分析して自身のパラメータやプロンプトを改善する「自己進化型アーキテクチャ」です。三層構造のスキル定義と自動ロールバック機構を備えた四層の安全防御により、人間が介入することなく、安全かつ継続的な事業成長を自動で追求し続けることが可能です。
主にShopify等を利用したEC運営の完全自動化や、AIエージェントによる自律的なワークフロー構築の高度なリファレンスとして活用できます。
zip未取得
ec-ops — 輸入無在庫販売 EC 自動運営システム
テーマ: HOOTL(Human Out of The Loop) — 人間介在なしで 24h 自動運営
プロジェクト: .AI 自動運転部 水曜日チーム
フェーズ: Phase 1 完了(533テスト PASS / 2026-05-15)
HOOTL: 人間の介在を最小化し、AI が自律的に事業運営・自己改善するシステム。
人間が関与するのは kill switch / KPI 設定 / 閾値変更 / 事後監査 の 4 種のみ。
---
アーキテクチャ(5層構造)
| 層 | パス | 役割 |
|---|---|---|
| L4 | improvement/ | HOOTL 改善層 — 自動マージ・6層検証・段階展開・ロールバック |
| L3 | src/db/ + src/common/ | 中央 DB(SQLite + FTS5)・repository・common 基盤 |
| L2 | agents/{name}/ | 10 LLM エージェント — AgentRunner 経由 claude -p 統一起動 |
| L1 | src/runner.py | APScheduler + chain 駆動ワークフロー管理 |
| L0 | tools/{name}/ | CLI 7 種 — 外部 API・ショップ操作の最小単位 |
設計書: ADR-002 / docs/02_アーキテクチャ/
---
業務エージェント(L2: AgentRunner 経由 claude -p)
各エージェントは agents/{name}/agent.md を読み込み、AgentRunner 経由で claude -p --add-dir を起動する。
| エージェント | 役割 | トリガーイベント |
|---|---|---|
guardrail | 著作権・商標チェック | schedule.compliance_scan / scout.completed / chain_pick.picked |
description | 商品タイトル・説明文生成(日本語) | guardrail.completed |
description_reviewer | 説明文品質レビュー(PASS / FAIL) | description.completed |
site_ops | ショップサイトへの商品登録・更新・再生成 | description-reviewer.approved / site-reviewer.failed |
site_reviewer | 掲載後サイトビジュアルレビュー | site-ops.listed |
vision_qa | 商品画像 QA(画像品質チェック) | site-ops.listed |
cs | Gmail 問い合わせ受信→分類→返信ドラフト生成 | 外部 Gmail トリガー |
cs_reviewer | CS 返信品質レビュー・Halt 判定 | cs.reply_ready |
audit_evaluator | 改善提案の評価・監査 | daily.trigger / schedule.discontinued_check |
applier | 改善提案の自動適用(三層構造保護機構込み) | audit-evaluator.proposal_ready |
audit_evaluator / applier は L4 HOOTL 改善層のエージェント。
scout / chain_pick / inventory_sync は task-820 で LLM-Free ジョブへ移行完了。
---
LLM-Free ジョブ(jobs/{name}/job.py 直接起動)
LLM を使用しない高頻度・決定論的処理は jobs/{name}/job.py として独立させ、
JOB_TRIGGERS 経由で直接 Popen 起動する(AgentRunner を経由しない)。
| ジョブ | 役割 | トリガーイベント |
|---|---|---|
scout | CJDrop API で商品発掘・スコアリング(決定論的) | schedule.daily_scout |
chain_pick | DB から出品候補を定期選定 | schedule.chain_pick |
inventory_sync | CJDrop API から在庫・コストを定期取込 | schedule.inventory_sync |
pricing | 競合価格調査 → 価格調整(7ルール数式) | schedule.daily_pricing / scout.completed |
pricing_full | 週次全件再評価 | schedule.full_repricing |
---
エージェント三層構造(agent.md / .claude/skills/{name}-toolkit/SKILL.md / skill_refs)
LLM 品質を長期維持するため、各エージェントの知識を 3 層に分離する。
agents/{name}/
├── agent.md # 実行プロンプト定義(AgentRunner が読み込む)
├── manifest.yaml # エージェント設定(必須ファイル・保護セクション定義)
├── .claude/
│ └── skills/
│ └── {name}-toolkit/
│ └── SKILL.md # スキル定義(LOCKED/EDITABLE セクション、Claude Code auto-discover)
├── skill_refs/ # 参照スキル群(criteria / checklist / persona 等、.claude/ 外)
│ ├── criteria.md
│ ├── checklist.md
│ └── ...
└── scripts/ # fetch_*.py / save_result.py(DB アクセス層)
| 層 | 対象 | 更新権限 | 更新頻度 |
|---|---|---|---|
| SKILL.md LOCKED セクション | 役割定義・禁止事項・基本動作 | 人間のみ | 四半期レビュー |
| SKILL.md EDITABLE セクション | 評価基準・チェック項目 | L4 AUTO | 月次(上限 4 回) |
| skill_refs/ | 参照ガイドライン・ペルソナ | L4 AUTO | 月次(上限 2 回) |
SKILL.md の LOCKED / EDITABLE マーカー: <!-- LOCKED: section=xxx --> / <!-- /LOCKED -->
詳細: 三層構造アーキテクチャ設計書
---
四層防御(自動変更の安全保護)
L4 HOOTL 改善層がエージェントを自動改変する際の安全機構。
| 層 | チェック内容 | タイミング |
|---|---|---|
| 第1層 | LOCKED セクション改変検出 | pre-commit / applier 実行時 |
| 第2層 | EDITABLE セクション長変化(上限 %) | applier 実行時 |
| 第3層 | manifest.yaml 整合性(required_files / references) | applier 実行時 |
| 第4層 | delta_max 超過(improvement.yaml) + git pre-push 再検証 | pre-commit / pre-push |
git hook インストール:
bash scripts/install-hooks.sh
---
CLI 7 種(L0: tools)
| CLI | 担当領域 |
|---|---|
cjcli | CJDrop API(商品検索・在庫・注文連携) |
shopcli | ショップサイト操作(商品ページ作成・更新) |
ecopscli | EC 全体オペレーション制御(ルーティング・kill switch) |
guardcli | ガードレール操作(著作権・商標チェック実行) |
eventcli | workflow_events 送受信(chain trigger 管理) |
reportcli | レポート生成・出力 |
pricecli | 競合価格取得(Yahoo!ショッピング API 経由) |
各 CLI は独立した pyproject.toml を持ち、tools/{name}/ で管理。
---
フォルダ構成
ec-ops/
├── agents/ # L2: 10 LLM エージェント
│ └── {name}/
│ ├── agent.md # 実行プロンプト(AgentRunner が読み込む)
│ ├── manifest.yaml # エージェント設定
│ ├── .claude/
│ │ └── skills/
│ │ └── {name}-toolkit/
│ │ └── SKILL.md # スキル定義(Claude Code auto-discover)
│ ├── skill_refs/ # 参照スキル群(.claude/ 外)
│ └── scripts/ # fetch_*.py / save_result.py
│
├── jobs/ # LLM-free ジョブ(5 種)
│ └── {name}/
│ └── job.py
│
├── src/ # L1: ワークフロー管理
│ ├── runner.py # APScheduler + エントリポイント
│ ├── chain_runner.py # AGENT_TRIGGERS / JOB_TRIGGERS レジストリ
│ └── db/ # DB スキーマ・repository
│
├── lib/ # 共通ライブラリ
│ └── agent_framework.py # AgentRunner / ClaudeRunner / ChainEmitter
│
├── improvement/ # L4: HOOTL 改善層
│ ├── engine.py # ImprovementEngine
│ └── ...
│
├── tools/ # L0: CLI 7 種
│ └── {name}/
│ ├── pyproject.toml
│ └── {name}/ # CLI 実装
│
├── docs/ # 設計ドキュメント
│ ├── 02_アーキテクチャ/
│ ├── 03_設計/
│ ├── 06_意思決定/ # ADR(ADR-002 等)
│ └── architecture/ # 三層構造・runner-framework 設計書
│
├── migrations/ # DB マイグレーション
├── tests/ # 統合テスト
├── config/ # システム設定(system.yaml 等)
├── secrets/ # 認証情報(git 管理外)
├── docker-compose.yml # runner + urium-server 2コンテナ構成
└── pyproject.toml # プロジェクト設定・依存関係
---
セットアップ
開発環境(ローカル)
# 依存関係インストール(uv 推奨)
uv sync
# または pip
python -m venv .venv && source .venv/bin/activate
pip install -e ".[dev]"
# git hook インストール(四層防御有効化)
bash scripts/install-hooks.sh
本番環境(Docker Compose)
# 認証情報の配置
mkdir -p ~/.ec-ops
cp path/to/shopify-token.json ~/.ec-ops/
cp path/to/cj-token.json ~/.ec-ops/
# Claude Code subscription 認証(ホストで事前に claude login 済みであること)
# ~/.claude と ~/.claude.json がコンテナにマウントされる
# 環境変数設定
cp .env.example .env
# .env の EC_OPS_DB_PATH / URIUM_* 等を環境に合わせて編集
# 起動(urium-server + runner の 2 コンテナ)
docker-compose up -d
# ログ確認
docker-compose logs -f runner
テスト実行
# 全テスト
uv run pytest
# 特定エージェント
uv run pytest agents/description/tests/ -v
---
開発手順
通常の feature 開発
# 1. feature ブランチ作成(起点は dev)
git checkout dev && git pull
git checkout -b feature/my-work
# 2. 実装 → テスト → ruff / mypy 確認
uv run pytest
uv run ruff check . && uv run mypy .
# 3. コミット(四層防御 hook が自動チェック)
git add ... && git commit -m "feat: ..."
# 4. dev にマージ(PR レビュー後)
エージェントへの変更
| 変更対象 | 権限 | 手順 |
|---|---|---|
agent.md | 人間のみ | feature ブランチ → PR |
SKILL.md LOCKED セクション | 人間のみ | dev 直接コミット |
SKILL.md EDITABLE セクション | L4 AUTO / 人間 | 四層防御通過後に適用 |
skill_refs/*.md | L4 AUTO / 人間 | manifest バリデーション通過後 |
scripts/*.py | 人間のみ | feature ブランチ → PR |
ワークフローチェーン
[scheduler cron]
├→ schedule.daily_scout → scout (job) → scout.completed
│ ├→ guardrail → guardrail.completed
│ └→ pricing (job)
├→ schedule.chain_pick → chain_pick (job) → chain_pick.picked
│ └→ guardrail → guardrail.completed
├→ schedule.inventory_sync → inventory_sync (job)
├→ schedule.daily_pricing → pricing (job)
└→ daily.trigger → audit_evaluator → audit-evaluator.proposal_ready
└→ applier
[guardrail.completed]
└→ description → description.completed
└→ description_reviewer
├─ approved → site_ops → site-ops.listed
│ ├→ site_reviewer
│ └→ vision_qa
└─ failed → (drop)
[site-reviewer.failed]
└→ site_ops (再生成モード) → site-ops.regenerating → description
kill switch
# 全エージェント停止(緊急時)
ecopscli kill-switch enable
# 再開
ecopscli kill-switch disable
---
既知の課題・制限事項
現時点で認識している制限事項と対応方針を記録する。
| 課題 | 詳細 | 対応方針 |
|---|---|---|
| CJ-Shopify 商品紐づけ | CJ Dropshipping API では Shopify 商品 ID を直接取得できないため、出品後に別途マッチング処理が必要 | DB に shopify_product_id を保存する処理を site_ops に追加済み(verify_connection)。完全自動化は次フェーズ課題 |
| ジャンル選定 | gothic-plus-size ニッチジャンルは CJ 側の供給が少なく候補数が限られる | 折衷案として幅広めのキーワードスコアリングで運用中。ジャンル拡張は post-hackathon 検討 |
| Anthropic 課金体系変更(2026-06-15) | Claude API の課金変更が予定されており、現行の subscription 依存の自動運営に影響の可能性 | Claude Code CLI (OpenCode) への移行で対応見込み。移行手順は別途策定 |
| shopcli の dev 環境未インストール | shopify Python パッケージが WSL 開発環境にインストールされていないため、shopcli 関連テスト 5 件が失敗 | Docker 環境では正常動作確認済み。dev 環境の依存解消は post-hackathon 対応 |
---
参照ドキュメント
| ドキュメント | 内容 |
|---|---|
| ADR-002 | 再構築アーキテクチャ確定(単一根拠 ADR) |
| 三層構造設計書 | SKILL.md / skill_refs / config の三層詳細 |
| Runner フレームワーク設計書 | AgentRunner / ChainRunner の設計 |
| ワークフロー概要 | chain 駆動・イベントスキーマ |
| DB スキーマ | SQLite テーブル定義 |
---
ブランチ運用
| ブランチ | 用途 |
|---|---|
dev | 開発ブランチ(default) |
main | ハッカソン提出版(dev から作成、v1.0.0-hackathon-submission タグ付き) |