claude-code-publish
Convert Claude Code session.json files to clean, mobile-friendly HTML pages with pagination.
Example transcript produced using this tool.
Installation
Install this tool using uv:
uv tool install claude-code-publish
Or run it without installing:
uvx claude-code-publish --help
Usage
When using Claude Code for web you can export your session as a session.json file using the teleport command (and then hunting around on disk).
This tool converts that JSON into a browseable multi-page HTML transcript.
The quickest way to view a recent session is to import it directly and open in your browser:
claude-code-publish import --open
This shows an interactive picker to select a session, generates HTML, and opens it in your default browser.
For a local session file:
claude-code-publish session.json -o output-directory/
This will generate:
index.html- an index page with a timeline of prompts and commitspage-001.html,page-002.html, etc. - paginated transcript pages
Options
-o, --output DIRECTORY- output directory (default: current directory)--repo OWNER/NAME- GitHub repo for commit links (auto-detected from git push output if not specified)--open- open the generatedindex.htmlin your default browser--gist- upload the generated HTML files to a GitHub Gist and output a preview URL--json- include the original JSON session file in the output directory
Publishing to GitHub Gist
Use the --gist option to automatically upload your transcript to a GitHub Gist and get a shareable preview URL.
If you use that with the import command with no other options you can directly select a session to publish to a Gist:
claude-code-publish import --gist
The --gist option is available for other commands too:
claude-code-publish session.json --gist
claude-code-publish import session_01BU6ZZoB7zTHrh9DAspF5hj --gist
Each of these will output something like:
Gist: https://gist.github.com/username/abc123def456
Preview: https://gistpreview.github.io/?abc123def456/index.html
Files: /var/folders/.../session-id
The preview URL uses gistpreview.github.io to render your HTML gist. The tool automatically injects JavaScript to fix relative links when served through gistpreview.
When using --gist without -o, files are written to a temporary directory (shown in the output). You can combine both options to keep a local copy:
claude-code-publish session.json -o ./my-transcript --gist
Requirements: The --gist option requires the GitHub CLI (gh) to be installed and authenticated (gh auth login).
Including the JSON source
Use the --json option to include the original session JSON file in the output directory:
claude-code-publish session.json -o ./my-transcript --json
This will output:
JSON: ./my-transcript/session_ABC.json (245.3 KB)
The JSON file preserves its original filename. This is useful for archiving the source data alongside the HTML output.
Importing from Claude API
You can import sessions directly from the Claude API without needing to export a session.json file:
# List available sessions
claude-code-publish list-web
# Import a specific session
claude-code-publish import SESSION_ID -o output-directory/
# Import with interactive session picker
claude-code-publish import
# Import and publish to gist
claude-code-publish import SESSION_ID --gist
# Import and save the JSON session data
claude-code-publish import SESSION_ID --json
On macOS, the API credentials are automatically retrieved from your keychain (requires being logged into Claude Code). On other platforms, provide --token and --org-uuid manually.
The --json option for the import command saves the session data fetched from the API as {session_id}.json in the output directory.
Development
To contribute to this tool, first checkout the code. You can run the tests using uv run:
cd claude-code-publish
uv run pytest
And run your local development copy of the tool like this:
uv run claude-code-publish --help
Release files for claude-code-publish 0.2
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| claude_code_publish-0.2.tar.gz | 15.8 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| claude_code_publish-0.2-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 32.6 kB
Release files / claude_code_publish-0.2.tar.gz
| Download URL | claude_code_publish-0.2.tar.gz |
|---|---|
| Size | 15.8 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
483ebaed2917973ca44366b756fe08cfab70822a37d6646e0d167a6903b68318
|
|
BLAKE2b-256 checksum How to use checksums |
283945d1d36d6890e2f2023ec3b87f0b445c12e5dc6e9b64e1e330a346fc89aa
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.7
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Dec 25, 2025.
Transparency logRelease files / claude_code_publish-0.2-py3-none-any.whl
| Download URL | claude_code_publish-0.2-py3-none-any.whl |
|---|---|
| Size | 16.8 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
bc99863f3cb69843c7ef28bd475e261f1ac27657c9b6112ea6af17ea578b7ce5
|
|
BLAKE2b-256 checksum How to use checksums |
90ab104050cf3b5cb786bf4b5ba764d2afbe5492f6592b927cce1cab4d9d80fb
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.7
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Dec 25, 2025.
Transparency log