---
name: chatgpt
description: |
  ChatGPTの会話をClaude Codeに取り込む。共有リンク、会話URL、プロジェクト一括取得に対応。
  Playwright CLIで永続セッションを使い、DOMから会話を抽出してMarkdownで保存する。
metadata:
  short-description: ChatGPT会話のインポート
argument-hint: "/chatgpt <url|latest|projects|project name>"
---

# ChatGPT Import -- 会話取り込みスキル

ChatGPTの会話を取得し、Markdownファイルとして保存する。
Playwright CLI (Python) で永続ブラウザセッションを使用。

## 使い方

```
# 共有リンク（認証不要）
/chatgpt https://chatgpt.com/share/xxxx-xxxx-xxxx

# 会話URL（認証済みセッション使用）
/chatgpt https://chatgpt.com/c/xxxx-xxxx-xxxx

# 最新の会話を取得
/chatgpt latest

# プロジェクト一覧を表示
/chatgpt projects

# プロジェクト内の全会話を一括取得（名前の部分一致）
/chatgpt project agentありきの開発
```

## 実行手順

<learn-skill>

### Step 1: コマンドを判定

引数を確認して適切なコマンドを実行する:

- URL → 単一会話取得
- `latest` → 最新会話取得
- `projects` → プロジェクト一覧
- `project <name>` → プロジェクト一括取得

### Step 2: スクリプトのパスを特定

SKILL.md と同じディレクトリにある `chatgpt-import.py` を使用する。以下の順で確認:

1. `.claude/skills/chatgpt/chatgpt-import.py` (プロジェクトレベル)
2. `~/.claude/skills/chatgpt/chatgpt-import.py` (ユーザーレベル)

見つかったパスを `SCRIPT` として以降で使用する。

### Step 3: Pythonスクリプトを実行

**単一会話 / latest:**
```bash
uv run --with playwright python "$SCRIPT" "<url>" --json 2>&1
```

**プロジェクト一覧:**
```bash
uv run --with playwright python "$SCRIPT" "projects" --json 2>&1
```

**プロジェクト一括取得:**
```bash
uv run --with playwright python "$SCRIPT" "project" "<name>" --json 2>&1
```

- `--json` でJSON形式の結果サマリーを取得
- `2>&1` で stderr のログイン待ちメッセージも確認可能
- デフォルト保存先: `<cwd>/docs/logs/chatgpt/`
- タイムアウト: プロジェクト一括取得は会話数に応じて長くなる（600秒推奨）

**出力先ディレクトリを変更する場合:**
```bash
uv run --with playwright python "$SCRIPT" "<command>" --json --output-dir <path> 2>&1
```

### Step 4: 結果を確認

**単一会話の結果:**
```json
{
  "title": "会話タイトル",
  "count": 8,
  "output_path": "/path/to/saved.md",
  "source_url": "https://chatgpt.com/...",
  "error": null
}
```

**プロジェクト一括取得の結果:**
```json
{
  "project": "プロジェクト名",
  "project_dir": "/path/to/project-dir/",
  "total": 7,
  "succeeded": 7,
  "failed": 0,
  "conversations": [...],
  "error": null
}
```

**error が null でない場合:**
- `"login_timeout"`: ログインが必要。ユーザーにブラウザでChatGPTにログインするよう伝える
- `"no_messages"`: メッセージが取得できなかった。URLを確認
- `"no_conversations_found"`: 会話が見つからない
- `"project_not_found"`: プロジェクト名が見つからない

### Step 5: 保存されたMarkdownを読み込む

`output_path` のファイルを Read で読んで内容を確認する。
プロジェクト一括取得の場合は `project_dir` 配下のファイルを確認。

### Step 6: ユーザーに報告

**単一会話:**
- 取得したメッセージ数
- 会話のタイトル
- 保存先パス
- 会話の概要（各userメッセージのトピックを箇条書き）

**プロジェクト一括取得:**
- プロジェクト名
- 取得した会話数（成功/失敗）
- 保存先ディレクトリ
- 各会話のタイトルとメッセージ数

</learn-skill>

## 仕組み

- **Playwright CLI (Python)** を使用（MCP不使用）
- `launch_persistent_context` で `~/.claude/chatgpt-browser-data/` にセッション保存
- 初回のみChatGPTへのログインが必要（ブラウザが自動で開く）
- 2回目以降は認証済み状態が維持される
- `data-message-author-role` 属性でメッセージを抽出
- プロジェクトページ: `/g/g-p-{id}/project` からの会話リンク一覧を取得

## 保存先

```
# 単一会話
<project_root>/docs/logs/chatgpt/{date}-{title-slug}.md

# プロジェクト一括取得
<project_root>/docs/logs/chatgpt/{project-slug}/{date}-{title-slug}.md
```

プロジェクトルートで実行すると、プロジェクト配下に構造的に保存される。
ファイル名は `20260222-エージェント開発の証跡管理.md` のように日付+タイトルで生成。
同名ファイルが存在する場合は会話IDのサフィックスを付加して衝突を回避。

## 前提条件

playwright はスクリプト実行時に `uv run --with playwright` で自動インストールされる。

## トラブルシューティング

### ログインが求められる

初回はブラウザウインドウが開いてChatGPTのログインが必要。
180秒以内にログインしてください。Google OAuthリダイレクトにも対応。
ログイン後はセッションが永続化される。

### セッションが切れた

ChatGPTのセッション期限切れ。再度実行するとブラウザが開くのでログインし直す。

### ブラウザが開かない

```bash
uv run --with playwright python -m playwright install chromium
```

### メッセージが0件

- share URL: 共有リンクが有効か確認
- conversation URL: ログイン状態を確認
- ページの読み込みが遅い場合がある。再試行してみる

### プロジェクトが見つからない

`/chatgpt projects` でプロジェクト一覧を確認し、正確な名前を指定する。
部分一致で検索するため、一意に特定できる部分文字列でOK。
