{"id":30807682,"url":"https://github.com/robotdad/claude-code-archiver","last_synced_at":"2025-09-06T02:49:23.483Z","repository":{"id":311842283,"uuid":"1044562727","full_name":"robotdad/claude-code-archiver","owner":"robotdad","description":"Archives Claude Code conversations for a project into a zip with a viewer","archived":false,"fork":false,"pushed_at":"2025-08-26T23:53:19.000Z","size":104,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-08-27T08:25:34.647Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/robotdad.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2025-08-25T22:01:36.000Z","updated_at":"2025-08-26T23:53:23.000Z","dependencies_parsed_at":"2025-08-27T08:26:55.241Z","dependency_job_id":"785238a7-c525-4e58-96a5-3c5c5fa28e2b","html_url":"https://github.com/robotdad/claude-code-archiver","commit_stats":null,"previous_names":["robotdad/claude-code-archiver"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/robotdad/claude-code-archiver","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/robotdad%2Fclaude-code-archiver","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/robotdad%2Fclaude-code-archiver/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/robotdad%2Fclaude-code-archiver/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/robotdad%2Fclaude-code-archiver/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/robotdad","download_url":"https://codeload.github.com/robotdad/claude-code-archiver/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/robotdad%2Fclaude-code-archiver/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":273850899,"owners_count":25179357,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-09-06T02:00:13.247Z","response_time":2576,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2025-09-06T02:49:20.723Z","updated_at":"2025-09-06T02:49:23.472Z","avatar_url":"https://github.com/robotdad.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Claude Code Archiver\n\nArchive, view, and manage your Claude Code conversations with an interactive viewer and smart curation features.\n\n## Quick Start\n\nArchive conversations from any Claude Code project using `uvx` - no installation required:\n\n```bash\n# Basic usage - archive a project's conversations\nuvx --from git+https://github.com/robotdad/claude-code-archiver claude-code-archiver /path/to/your/project\n\n# Refresh an existing archive with new conversations (auto-detects project paths)\nuvx --from git+https://github.com/robotdad/claude-code-archiver claude-code-archiver --refresh /path/to/archive.zip\n```\n\n## View Your Archive\n\nAfter creating an archive:\n\n```bash\n# Extract and start the interactive viewer\nunzip your-archive.zip \u0026\u0026 cd your-archive-folder\npython serve.py\n```\n\nThis opens an interactive web viewer at `http://localhost:8000` where you can:\n- Browse conversations with smart titles and metadata\n- Hide/unhide conversations to curate your collection  \n- Export individual conversations as clean Markdown\n- Switch between focused and detailed view modes\n- Save changes back to the original ZIP archive\n\n## Core Features\n\n- 🎯 **One-command archiving** via `uvx` - no installation needed\n- 🔒 **Automatic sanitization** of sensitive data (API keys, tokens, passwords)  \n- 📝 **Smart conversation titles** extracted from your first message\n- 🛠️ **Interactive curation** - hide unsuccessful conversations, organize your collection\n- 📄 **Clean exports** - focused summaries or detailed technical records\n- 🔄 **Smart refresh** - add new conversations while preserving your customizations\n- 🧠 **Intelligent detection** - distinguishes true continuations from auto-linked conversations\n\n## Common Options\n\n```bash\n# Archive with custom output location\nuvx --from git+https://github.com/robotdad/claude-code-archiver claude-code-archiver /path/to/project --output /path/to/archives\n\n# Skip sensitive data sanitization (not recommended)\nuvx --from git+https://github.com/robotdad/claude-code-archiver claude-code-archiver /path/to/project --no-sanitize\n\n# Just list conversations without creating archive\nuvx --from git+https://github.com/robotdad/claude-code-archiver claude-code-archiver /path/to/project --list-only\n```\n\n## How It Works\n\nClaude Code stores conversations in `~/.claude/projects/` as JSONL files. The archiver:\n\n1. **Discovers** conversations for your project by mapping project paths to Claude's folder structure\n2. **Extracts** meaningful titles from your first message in each conversation\n3. **Sanitizes** sensitive data like API keys and passwords (enabled by default)\n4. **Creates** an interactive ZIP archive with viewer and all conversation data\n5. **Preserves** your customizations when refreshing with new conversations\n\n### Project Path Mapping\nClaude Code converts your project path into a folder name:\n- Project: `/Users/name/Source/my-project` \n- Claude folder: `~/.claude/projects/-Users-name-Source-my-project`\n\n## Advanced Features\n\n### Project Aliases\nInclude conversations from renamed or moved projects:\n\n```bash\n# Include conversations from old project names\nuvx --from git+https://github.com/robotdad/claude-code-archiver claude-code-archiver /path/to/current-project --alias /path/to/old-name\n\n# Use wildcards to include multiple related projects  \nuvx --from git+https://github.com/robotdad/claude-code-archiver claude-code-archiver /path/to/amplifier --alias \"/path/to/amplifier*\"\n```\n\n### Archive Management\n```bash\n# Refresh archive with new conversations (preserves your curation)\nuvx --from git+https://github.com/robotdad/claude-code-archiver claude-code-archiver --refresh /path/to/archive.zip\n\n# Add new project aliases to existing archive\nuvx --from git+https://github.com/robotdad/claude-code-archiver claude-code-archiver --refresh /path/to/archive.zip --alias /path/to/new-branch\n```\n\n### Interactive Viewer Features\n\nThe web viewer includes:\n- **Conversation curation**: Hide unsuccessful attempts, organize your collection\n- **Export modes**: Focused summaries or detailed technical records  \n- **Persistent storage**: Save your preferences back to the ZIP archive\n- **Smart display**: Tool interactions collapsed by default, snapshots hidden\n- **View modes**: Switch between clean reading and full technical details\n\n## Data Safety\n\n**Automatic Sanitization** (enabled by default) attempts to remove common sensitive patterns:\n- API keys with clear context (OpenAI `sk-...`, Anthropic `sk-ant-...`, GitHub `ghp_/ghs_...`)\n- Bearer tokens in Authorization headers\n- Database connection strings with passwords\n- Environment variables with sensitive names (uppercase only)\n- JWT tokens\n\n**Important:** Sanitization is a courtesy feature, not a security guarantee. It cannot catch all possible sensitive data. If you've accidentally included secrets in conversations, consider them potentially compromised. Review your archives and regenerate any exposed credentials.\n\n## Command Reference\n\n```bash\nclaude-code-archiver [PROJECT_PATH] [OPTIONS]\n```\n\n### Common Options\n- `--refresh, -r PATH`: Refresh existing archive (PROJECT_PATH optional when using this)\n- `--alias, -a TEXT`: Include conversations from additional project paths (supports wildcards)\n- `--output, -o PATH`: Custom output directory\n- `--no-sanitize`: Skip sanitization (not recommended)\n- `--list-only, -l`: List conversations without creating archive\n\n### Examples\n```bash\n# Basic usage\nuvx --from git+https://github.com/robotdad/claude-code-archiver claude-code-archiver /path/to/project\n\n# With project aliases  \nuvx --from git+https://github.com/robotdad/claude-code-archiver claude-code-archiver /path/to/current-project --alias /path/to/old-name --alias \"/path/to/experiments*\"\n\n# Refresh existing archive\nuvx --from git+https://github.com/robotdad/claude-code-archiver claude-code-archiver --refresh /path/to/archive.zip\n```\n\n## Development\n\n### Project Structure\n\n```\nclaude-code-archiver/\n├── src/claude_code_archiver/\n│   ├── __init__.py\n│   ├── cli.py              # Command-line interface with enhanced options\n│   ├── discovery.py        # Advanced conversation discovery and type detection\n│   ├── parser.py           # JSONL parsing with multimodal support\n│   ├── sanitizer.py        # Comprehensive sensitive data sanitization\n│   ├── archiver.py         # Archive creation with title extraction and todo integration\n│   ├── serve_template.py   # Web server template (serves viewer at root path)\n│   └── viewer/\n│       └── generator.py    # Enhanced HTML viewer with metadata display\n├── tests/                  # Comprehensive test suite\n├── docs/                   # Documentation and analysis\n├── pyproject.toml          # Project configuration\n├── ruff.toml              # Linter configuration\n└── Makefile               # Development tasks\n```\n\n### Development Commands\n\n```bash\n# Install dependencies\nmake install\n# or directly with uv\nuv sync\n\n# Run the CLI from source\nuv run claude-code-archiver --help\n\n# Run tests\nmake test\n# or directly with uv\nuv run pytest tests/\n\n# Format code\nmake format\n# or directly with uv\nuv run ruff format src/ tests/\n\n# Lint code\nmake lint\n# or directly with uv\nuv run ruff check src/ tests/\n\n# Type check\nmake type\n# or directly with uv\nuv run pyright\n\n# Run all checks\nmake check\n\n# Build package for distribution\nmake build\n# or directly with uv\nuv build\n```\n\n### Testing\n\nThe test suite includes:\n- Unit tests for each module\n- Integration tests for end-to-end workflows\n- Fixtures for sample conversation data\n\nRun tests with coverage:\n```bash\nmake test\n```\n\n## Requirements\n\n- Python 3.11+\n- uv (for development)\n\n## License\n\nMIT License - See LICENSE file for details.\n\n## Contributing\n\nContributions are welcome! Please:\n1. Fork the repository\n2. Create a feature branch\n3. Run `make check` to ensure code quality\n4. Submit a pull request\n\n## Support\n\nFor issues or questions, please open an issue on GitHub:\nhttps://github.com/robotdad/claude-code-archiver/issues","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frobotdad%2Fclaude-code-archiver","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Frobotdad%2Fclaude-code-archiver","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frobotdad%2Fclaude-code-archiver/lists"}