Files
AIChatExporter/.env.example
T
JesseMarkowitzandClaude Opus 4.8 1f5a445ada feat: v0.8.0 — Claude Code subagent capture, own Joplin notebook, git-root repo tags, multi-root scanning
- Subagents: fold Task-tool transcripts (subagents/*.jsonl) inline as
  collapsible <details> blocks at the spawn point; their own tool traffic
  collapses under the same policy; nesting handled via toolUseId matching
- Joplin: Claude Code gets its own top-level AI-ClaudeCode notebook;
  update_note sets parent_id so notes self-heal/relocate on re-sync
- Repo [tags] in titles via git-root detection (nearest .git ancestor),
  home-wide and cross-workspace; CLAUDE_CODE_REPO_TAG_IGNORE escape hatch
- Multi-root scanning: CLAUDE_CODE_DIR as os.pathsep list + CLAUDE_CONFIG_DIR;
  merged by launch-folder, newer-mtime wins on UUID collision
- 298 tests passing

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-06 05:04:41 -04:00

95 lines
4.4 KiB
Bash

# ============================================================
# AI Chat Exporter — Configuration
# ============================================================
# Copy this file to .env and fill in your values.
# NEVER commit .env to git. It contains secrets.
# --- ChatGPT ---
# How to get: open chatgpt.com in Chrome → F12 → Application tab
# → Cookies → https://chatgpt.com → find the two cookie chunks:
# __Secure-next-auth.session-token.0 (starts with "eyJ") → CHATGPT_SESSION_TOKEN
# __Secure-next-auth.session-token.1 (the remainder) → CHATGPT_SESSION_TOKEN_1
# Token type: JWE. Typically valid for ~7 days.
CHATGPT_SESSION_TOKEN=
CHATGPT_SESSION_TOKEN_1=
# ChatGPT Projects (optional): comma-separated list of project gizmo IDs.
# Project conversations are NOT included in the default /conversations listing.
# How to find: open chatgpt.com → click a Project → look at the browser URL:
# https://chatgpt.com/g/g-p-<ID>-<slug>/project → copy "g-p-<ID>"
# Example: CHATGPT_PROJECT_IDS=g-p-68c2b2b3037c8191890036fb4ae3ed9f,g-p-anotherproject
CHATGPT_PROJECT_IDS=
# --- Claude ---
# How to get: open claude.ai in Chrome → F12 → Application tab
# → Cookies → https://claude.ai → find "sessionKey" → copy Value
# Token type: opaque string. Typically valid for ~30 days.
CLAUDE_SESSION_KEY=
# --- Claude Code (local agent sessions) ---
# The claude-code provider reads local Claude Code transcripts. By default it
# scans ~/.claude/projects/ (plus $CLAUDE_CONFIG_DIR/projects when that is set).
# To scan additional roots — e.g. other machines' sessions copied onto this box —
# set a ':'-separated list of projects roots. Sessions are merged by folder.
#CLAUDE_CODE_DIR=~/.claude/projects:/mnt/backup/laptop/.claude/projects
#
# Session titles are tagged with the git repos they touched, e.g.
# "Resume StartWRT work [start-technologies]". To never tag specific repos,
# list their names here (comma-separated).
#CLAUDE_CODE_REPO_TAG_IGNORE=some-repo,another-repo
# --- Output ---
# Where exported Markdown files are written (default: ./exports)
EXPORT_DIR=./exports
# Output folder structure. Options:
# provider/project/year (default) → exports/claude/my-project/2024/file.md
# provider/project → exports/claude/my-project/file.md
# provider/year → exports/claude/2024/file.md (ignores projects)
OUTPUT_STRUCTURE=provider/project/year
# What to do with content that was invisible in the provider's web UI
# (file-retrieval tool dumps, hidden context like Custom Instructions).
# These dumps can be 90% of a conversation's bytes. Options:
# placeholder (default) → one-line placeholder with tool name and size
# full → keep everything (pre-v0.6.0 behavior)
# omit → drop entirely (still counted in the run summary)
EXPORTER_HIDDEN_CONTENT=placeholder
# Download conversation assets (images, audio) next to the Markdown, into a
# media/ folder, and inline them. Options:
# images (default) → images only
# all → also audio/voice clips and other files
# off → keep text placeholders, download nothing
# Downloaded media is uploaded to Joplin as resources on the next `joplin` run.
EXPORTER_DOWNLOAD_MEDIA=images
# Cap how many conversations are downloaded per export run (per provider).
# Runs are resumable — a capped run continues where it stopped next time.
# Keeps big backfills from looking like scraper traffic. Unset = unlimited.
#MAX_CONVERSATIONS_PER_RUN=25
# Seconds between consecutive API requests (small random jitter is added).
# Default 1.0; set 0 to disable pacing.
#REQUEST_DELAY=1.0
# --- Joplin ---
# Automate importing exported conversations into Joplin as notes.
# Requires Joplin desktop running with the Web Clipper service enabled.
# How to get the token:
# Joplin → Tools → Options → Web Clipper → copy "Authorization token"
JOPLIN_API_TOKEN=
# API URL (default port is 41184; change only if you've customised it)
JOPLIN_API_URL=http://localhost:41184
# Request timeout in seconds (default: 30). Increase if Joplin times out on
# large conversations. Example: JOPLIN_REQUEST_TIMEOUT=60
# JOPLIN_REQUEST_TIMEOUT=30
# --- Cache ---
# Where the sync manifest is stored (default: ./cache, inside the install directory)
CACHE_DIR=./cache
# --- Logging ---
# Log file path. Set to "none" to disable file logging.
LOG_FILE=./cache/logs/exporter.log