{"id":51329475,"url":"https://github.com/quickcall-dev/opentrace","last_synced_at":"2026-07-01T21:32:38.384Z","repository":{"id":359391600,"uuid":"1245609373","full_name":"quickcall-dev/opentrace","owner":"quickcall-dev","description":"Multi-CLI AI coding session tracer. Normalize, store, and browse sessions from Claude Code, Codex CLI, Gemini CLI, Cursor, and pi.dev.","archived":false,"fork":false,"pushed_at":"2026-05-21T19:27:49.000Z","size":1681,"stargazers_count":1,"open_issues_count":0,"forks_count":1,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-06-24T13:06:25.111Z","etag":null,"topics":["ai","ai-agents","claude","cli","code-assistant","codex","cursor","gemini","nextjs","observability","postgresql","session-tracking","tracer"],"latest_commit_sha":null,"homepage":"https://quickcall.dev","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/quickcall-dev.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","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,"notice":null,"maintainers":null,"copyright":null,"agents":"AGENTS.md","dco":null,"cla":null}},"created_at":"2026-05-21T11:37:00.000Z","updated_at":"2026-05-22T05:16:55.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/quickcall-dev/opentrace","commit_stats":null,"previous_names":["quickcall-dev/opentrace"],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/quickcall-dev/opentrace","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/quickcall-dev%2Fopentrace","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/quickcall-dev%2Fopentrace/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/quickcall-dev%2Fopentrace/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/quickcall-dev%2Fopentrace/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/quickcall-dev","download_url":"https://codeload.github.com/quickcall-dev/opentrace/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/quickcall-dev%2Fopentrace/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":35024359,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-07-01T02:00:05.325Z","response_time":130,"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":["ai","ai-agents","claude","cli","code-assistant","codex","cursor","gemini","nextjs","observability","postgresql","session-tracking","tracer"],"created_at":"2026-07-01T21:32:37.505Z","updated_at":"2026-07-01T21:32:38.378Z","avatar_url":"https://github.com/quickcall-dev.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# QuickCall OpenTrace\n\nMulti-CLI AI coding session tracer. Normalize, store, and browse sessions from Claude Code, Codex CLI, Gemini CLI, Cursor, and pi.dev — in one PostgreSQL database with a web UI.\n\n\u003ctable\u003e\n  \u003ctr\u003e\n    \u003ctd width=\"50%\"\u003e\n      \u003ca href=\".github/images/demo.png\"\u003e\n        \u003cimg src=\".github/images/demo.png\" alt=\"Session Browser\" width=\"100%\"/\u003e\n      \u003c/a\u003e\n      \u003cp align=\"center\"\u003e\u003csub\u003eSession Browser — Search, filter, and inspect messages\u003c/sub\u003e\u003c/p\u003e\n    \u003c/td\u003e\n    \u003ctd width=\"50%\"\u003e\n      \u003ca href=\".github/images/parallel-sessions.png\"\u003e\n        \u003cimg src=\".github/images/parallel-sessions.png\" alt=\"Parallel Session View\" width=\"100%\"/\u003e\n      \u003c/a\u003e\n      \u003cp align=\"center\"\u003e\u003csub\u003eParallel Session View — Side-by-side comparison\u003c/sub\u003e\u003c/p\u003e\n    \u003c/td\u003e\n  \u003c/tr\u003e\n\u003c/table\u003e\n\n## Supported CLIs\n\n| CLI | Data source | Notes |\n|-----|-------------|-------|\n| **Claude Code** | `~/.claude/projects/**/*.jsonl` | Full message + tool history |\n| **Codex CLI** | `~/.codex/sessions/*/*/*/rollout-*.jsonl` | Token usage, tool calls |\n| **Gemini CLI** | `~/.gemini/tmp/*/chats/session-*.json` | Shell commands, file edits |\n| **Cursor** | `~/.cursor/projects/*/agent-transcripts/*.txt` + state.vscdb | Agent transcripts, composer data |\n| **pi.dev** | `~/.pi/agent/sessions/**/*.jsonl` | Kimi model, thinking blocks |\n\n## Quick Start\n\n### Full stack (with web UI)\n\n```bash\ngit clone https://github.com/quickcall-dev/opentrace.git\ncd opentrace\ndocker compose up -d\nopen http://localhost:3000\n```\n\n### Backend only (PyPI)\n\n```bash\npip install quickcall-opentrace\nexport QUICKCALL_OPENTRACE_DSN=\"postgresql://user:pass@localhost:5432/quickcall\"\nquickcall init\nquickcall-server     # :19777\nquickcall-daemon     # file watcher\n```\n\nThe frontend is Docker-only. The PyPI package provides server + daemon CLIs only.\n\nRun `quickcall doctor` to verify your setup.\n\nSee [Bring Your Own Postgres](docs/guide/bring-your-own-postgres.md) for BYOP setup, multiple machines, and background mode.\n\n## Architecture\n\nFull architecture and schema decisions: [docs/architecture/README.md](docs/architecture/README.md)\n\n```mermaid\nflowchart LR\n    subgraph Host\n        A[Claude Code] --\u003e D\n        B[Codex CLI] --\u003e D\n        C1[Cursor] --\u003e D\n        C2[pi.dev] --\u003e D\n        C3[Gemini CLI] --\u003e D\n    end\n\n    D[\"Daemon\\n(file watcher + normalizer)\"] --\u003e |\"HTTP batches\"| S[\"Ingest Server\\n:19777\"]\n    S --\u003e |\"COPY writes\"| P[(PostgreSQL)]\n    P --\u003e |\"API queries\"| F[\"Frontend\\nNext.js 15 :3000\"]\n```\n\n1. **Daemon** watches `~/.claude`, `~/.codex`, `~/.gemini`, `~/.cursor`, `~/.pi`\n2. **Collector** normalizes each CLI format to `NormalizedMessage`\n3. **Pusher** batches messages to the ingest server\n4. **Server** validates, deduplicates, writes via `COPY`\n5. **Frontend** renders sessions with gantt, messages, minimap\n\n## Installation\n\n| Method | Command | Includes UI |\n|--------|---------|-------------|\n| Docker (recommended) | `git clone ... \u0026\u0026 docker compose up -d` | Yes |\n| Source | `uv sync --extra dev` | Yes (run frontend separately) |\n| PyPI | `pip install quickcall-opentrace` | No |\n\n## Configuration\n\nAll variables use the `QUICKCALL_OPENTRACE_` prefix.\n\n| Variable | Used by | Default | Description |\n|----------|---------|---------|-------------|\n| `DSN` | server | `postgresql://quickcall:quickcall@db:5432/quickcall` | Postgres connection string |\n| `HOST` | server | `0.0.0.0` | Bind interface |\n| `ADMIN_KEYS` | server | `admin_dev` | Comma-separated admin API keys |\n| `PUSH_KEYS` | server | `push_dev` | Comma-separated ingest API keys |\n| `INGEST_URL` | daemon | `http://localhost:19777/ingest` | Push endpoint |\n| `API_KEY` | daemon | — | API key for pushes |\n\nSee `.env.example` for a complete reference.\n\n## API Endpoints\n\n| Method | Path | Auth | Description |\n|--------|------|------|-------------|\n| GET | `/health` | — | Health check |\n| POST | `/ingest` | Push | Submit normalized messages |\n| GET | `/api/sessions` | Admin | List sessions |\n| GET | `/api/messages` | Admin | Messages for a session |\n| GET | `/api/stats` | Admin | Aggregate stats |\n| GET | `/api/sync` | Admin | File sync state |\n\n## Development\n\n```bash\n# Setup\nuv sync --extra dev\n\n# Start dependencies\ndocker compose up -d db\n\n# Terminal 1 — Server\nuv run python -m opentrace.server\n\n# Terminal 2 — Daemon\nuv run python -m opentrace.daemon\n\n# Terminal 3 — Frontend\ncd frontend \u0026\u0026 npm install \u0026\u0026 npm run dev\n\n# Tests\nuv run pytest\n\n# Lint\nuv run ruff check opentrace/ tests/\nuv run ruff format opentrace/ tests/\n\n# Rebuild Docker\ndocker compose up -d --build server daemon\ndocker compose up -d --build frontend\n\n# Pre-push validation\n./scripts/e2e-pypi-smoke-test.sh\n./scripts/e2e-docker-smoke-test.sh\n```\n\n### Git hooks\n\n```bash\ngit config core.hooksPath .githooks\n```\n\nCommits must follow conventional format (`fix:`, `feat:`, etc.) and include a `Why:` section with 2+ bullets.\n\n### Wipe and re-ingest\n\n```bash\nPGPASSWORD=quickcall psql -h localhost -p 15433 -U quickcall -d quickcall -c \\\n  \"TRUNCATE TABLE tool_calls, tool_results, token_usage, messages, file_progress, sessions, schema_version RESTART IDENTITY CASCADE; INSERT INTO schema_version (version) VALUES (1);\"\nrm ~/.quickcall-opentrace/state.json ~/.quickcall-opentrace/backfilled_sessions.json 2\u003e/dev/null\ndocker compose restart daemon\n```\n\n### Adding a new CLI source\n\n1. **Schema** — Add transform in `opentrace/schemas/\u003csource\u003e/transform.py`\n2. **Collector** — Add `_collect_\u003csource\u003e` in `opentrace/daemon/collector.py`\n3. **Tests** — Add fixtures in `tests/fixtures/` and tests in `tests/schemas/`, `tests/daemon/`\n4. **Watcher** — Add glob pattern in `opentrace/daemon/config.py` if needed\n\n## Documentation\n\n| Doc | What's inside |\n|-----|---------------|\n| [Architecture](docs/architecture/README.md) | Schema decisions, data flow, component design |\n| [BYOP Guide](docs/guide/bring-your-own-postgres.md) | Own Postgres, multiple machines, background mode |\n| [Dev Environment](docs/guide/dev-environment.md) | Full local setup, IDE config, troubleshooting |\n| [Publishing](docs/guide/pypi-publish.md) | PyPI release checklist and version bumping |\n| [Guide Index](docs/guide/README.md) | All user and contributor guides |\n\n## License\n\nApache 2.0 — see [LICENSE](LICENSE).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fquickcall-dev%2Fopentrace","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fquickcall-dev%2Fopentrace","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fquickcall-dev%2Fopentrace/lists"}