Skip to main content

Claude Code Web UI

Project description

TWICC

The Web Interface for Claude Code

A web UI to browse and interact with your Claude Code sessions. View projects, sessions, conversation history, costs, and run Claude agents — all from your browser.

Disclaimer

This is a personal project made by Twidi for his own needs. It is freely available and you are welcome to use it however you see fit.

That said, no support is guaranteed. I am open to suggestions, improvements, and contributions, but there is no commitment to address issues or review pull requests.

Note: The project was almost entirely vibe-coded, with general oversight from the author.

Quick start

uvx twicc

Then open http://localhost:3500.

Don't have uvx? It comes with uv, a fast Python package manager. Install it with:

curl -LsSf https://astral.sh/uv/install.sh | sh

If you prefer using pip install twicc in your own virtualenv, that works too.

Features

  • Browse all your Claude Code projects and sessions
  • View full conversation history with tool use details
  • Start and interact with Claude agents from the browser
  • Track costs and token usage per session
  • Daily activity heatmaps
  • Git integration (log, diffs, file browser)
  • Optional password protection
  • Real-time updates via WebSocket
  • Fully mobile-friendly interface

Remote access

The interface is fully usable on mobile. Combined with a tunnel service like Cloudflare Tunnel or ngrok, you can access TWICC from anywhere and interact with Claude Code on the go.

Important: If you expose TWICC over the internet, make sure to enable password protection (see Configuration below).

Mobile usage

The interface is designed to work well on mobile devices. The terminal includes touch-based text selection (drag to select, auto-copied to clipboard) and scrollbar support.

For a comfortable terminal experience on Android, we recommend Unexpected Keyboard — a keyboard that natively supports Ctrl, Esc, Tab, and other keys essential for terminal use.

How it works

TWICC reads the JSONL data files that Claude Code stores in ~/.claude/projects/ and indexes them into a local SQLite database (~/.twicc/db/data.sqlite). These data files remain the source of truth for everything displayed in the interface — TWICC never modifies them. Whether you use Claude Code directly from the terminal or interact through TWICC, everything shows up in the same place.

When you start a session or send messages through TWICC, it uses the Claude Agent SDK to run real Claude Code processes under the hood. This means it uses your existing Claude Code credentials and configuration — there is nothing extra to set up. The conversation data written by Claude Code is then picked up by TWICC's file watcher and displayed in real time.

On each startup, TWICC detects changes and updates its database accordingly. While running, it watches the filesystem for new sessions and updates in real time.

Requirements

  • Python 3.13+
  • A ~/.claude/projects/ directory (created by Claude Code)

Configuration

All configuration is via environment variables, set in ~/.twicc/.env:

Variable Default Description
TWICC_PORT 3500 Server port
TWICC_PASSWORD_HASH (empty) SHA-256 hash to enable password protection
TWICC_DATA_DIR ~/.twicc/ Data directory (database, logs)

Generate a password hash:

python -c "import hashlib; print(hashlib.sha256(b'your_password').hexdigest())"

Development

git clone https://github.com/twidi/twicc.git
cd twicc
cd frontend && npm install && cd ..

Two ways to run in development:

With devctl.py (recommended) — runs Vite dev server with hot-reload, no build step needed:

./devctl.py start

Run ./devctl.py --help for all available commands and configuration options.

With run.py — runs the backend only, requires a frontend build first:

cd frontend && npm run build && cd ..
uv run run.py

Optionally, install dev tools (django-extensions, ipython):

uv sync --group dev

Building and publishing

uv build        # Build sdist + wheel → dist/
uv publish      # Publish to PyPI

The build automatically runs npm ci + npm run build in frontend/ via a hatch build hook — no manual frontend build step needed.

Tech stack

  • Backend: Django 6, Uvicorn, Django Channels (WebSocket)
  • Frontend: Vue.js 3, Vite
  • Database: SQLite (with WAL mode)
  • Process management: Claude Agent SDK

Current limitations

  • The built-in MCP server (Chrome integration) is always active

FAQ

Can I use TWICC while Claude Code is running? Yes. TWICC only reads Claude Code's data files and never modifies them.

Where is my data stored? By default in ~/.twicc/. This includes the SQLite database and log files. Set TWICC_DATA_DIR to change the location.

Where are the logs? In ~/.twicc/logs/backend.log. This file is useful for troubleshooting startup or runtime issues.

How do I reset the database? Delete ~/.twicc/db/data.sqlite* and restart TWICC. It will rebuild from Claude Code's source files.

License

MIT

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

twicc-1.0.2.tar.gz (4.4 MB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

twicc-1.0.2-py3-none-any.whl (3.3 MB view details)

Uploaded Python 3

File details

Details for the file twicc-1.0.2.tar.gz.

File metadata

  • Download URL: twicc-1.0.2.tar.gz
  • Upload date:
  • Size: 4.4 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.8.11

File hashes

Hashes for twicc-1.0.2.tar.gz
Algorithm Hash digest
SHA256 a8bd6fd204b3462fae797e4e216f811622b7e12db4a78de3ce6f455ad5c6b21b
MD5 1f8c46816b07a8439bc63975e48f5dbb
BLAKE2b-256 bd0415561907b5c49d4b1254d68fd4d26c911cffb1419497eff4a2c056c23e03

See more details on using hashes here.

File details

Details for the file twicc-1.0.2-py3-none-any.whl.

File metadata

  • Download URL: twicc-1.0.2-py3-none-any.whl
  • Upload date:
  • Size: 3.3 MB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.8.11

File hashes

Hashes for twicc-1.0.2-py3-none-any.whl
Algorithm Hash digest
SHA256 2d71f254189fbb29e813460a2a70cd0128d300c78fa4c623fecaed62799bb345
MD5 7d7a4d8cdcab752c53db5029fc3e3ace
BLAKE2b-256 2e26ba1269682069231dfb47752303871c5b0ad1c9782a160419f74893e92b8d

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page