Skip to content

feat(sessions): bring axon ingest sessions to first-class status #34

@jmagar

Description

@jmagar

Summary

axon ingest sessions exists and supports Claude, Codex, and Gemini session files, but it's been neglected. It should be one of the most-used features — the ability to instantly search everything you've ever discussed with any AI agent. Get it fully operational.

Current State

What works today:

  • SessionStateTracker — dedup via axon_session_ingest_state Postgres table (tracks mtime + size, skips already-indexed files)
  • Platform flags: --claude, --codex, --gemini (all platforms if none specified)
  • --project filter for Claude projects
  • Collection routing: resolve_collection() → e.g. claude-sessions, codex-sessions

Problems:

  • No structured metadata — chunks store only a source type string, no platform/project/date fields (see issue feat(ingest): show current/total progress in axon ingest list and axon status #32 for fix)
  • No cross-platform search — separate collections per platform means you can't query "all sessions where I asked about async rust" across Claude + Codex + Gemini in one shot
  • CLI-only — no web UI surface, buried behind a subcommand most people never run
  • Silent about skips — no progress bar showing new vs already-indexed files
  • Manual only — no scheduled re-scan; sessions grow but re-indexing requires remembering to run it
  • Hardcoded paths — no way to point at a custom export directory

Known Session File Locations

Platform Default path
Claude Code ~/.claude/projects/ (JSONL per project)
Codex ~/.codex/ (project dirs)
Gemini CLI ~/.gemini/ (session files)

What Needs To Happen

1. Unified cross-platform collection

Default: all platforms → "global-sessions" collection
axon query "async rust" --collection global-sessions  → searches Claude + Codex + Gemini at once

Per-platform collections still available via --collection claude-sessions etc. for targeted search.

2. Progress output

Discovering session files...
  claude   127 files  (12 new, 115 skipped — already indexed)
  codex     43 files  (43 new)
  gemini    18 files  ( 5 new, 13 skipped)
Indexing 60 new sessions...
  [████████████████████░░░░░░░░░░] 42/60 sessions  1,847 chunks embedded

3. Custom session directory flag

axon ingest sessions --sessions-dir ~/exports/claude-sessions

Also support compressed archives where possible (.json.gz).

4. Scheduled re-indexing

axon refresh sessions --schedule "0 2 * * *"   # nightly re-scan

Or document a simple cron/hook setup for triggering after each AI session ends.

5. Web UI — Sessions search surface

New /sessions route in the Reboot shell:

  • Semantic search bar across all indexed sessions
  • Filter by: platform (Claude/Codex/Gemini), project, date range
  • Results: session title, platform badge, date, relevant excerpt
  • Click → open full session in viewer (rendered markdown)
  • Powered by axon query --collection global-sessions --filter session_platform=claude

6. axon sessions as a top-level command alias

axon sessions                    # ingest all platforms (same as axon ingest sessions)
axon sessions --claude           # Claude only
axon sessions --project axon     # filter by project name
axon sessions --since 7d         # only files modified in last 7 days

Files

File Action
crates/ingest/sessions.rs Unified global-sessions collection; progress bar with new/skipped counts; --sessions-dir flag
crates/ingest/sessions/claude.rs Structured metadata (session_platform, session_project, session_date, etc.)
crates/ingest/sessions/codex.rs Same
crates/ingest/sessions/gemini.rs Same
crates/cli/commands/sessions.rs --since, --sessions-dir flags; alias surface
apps/web/app/sessions/ New /sessions route — search + filter UI
docs/ingest/sessions.md Full doc: file paths, format details, troubleshooting

Acceptance Criteria

  • Default collection is global-sessions — one query searches Claude + Codex + Gemini
  • Progress bar shows new vs skipped file counts per platform
  • --sessions-dir <path> accepted for custom export locations
  • axon refresh sessions --schedule supported for automatic re-indexing
  • /sessions UI route: semantic search with platform/project/date filters + platform badges
  • Session chunks have structured metadata (platform, project, date, turn count) — see issue feat(ingest): show current/total progress in axon ingest list and axon status #32
  • axon sessions works as a top-level alias for axon ingest sessions
  • Session file paths for all three platforms documented in docs/ingest/sessions.md
  • cargo clippy clean, all tests pass

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions