A mobile-first PWA for AI-assisted development. Chat with Claude Code, OpenAI Codex CLI, or local LLMs (via Ollama) from your phone, tablet, or any browser. Features real-time streaming, conversation management, git integration, and file preview. Pair with Tailscale for secure access from anywhere.
- File browser - Browse and view files in the conversation's working directory
- Directory picker - New-chat cwd chooser with breadcrumbs, fuzzy filtering, deep recursive search, favorites, and keyboard navigation
- File preview - View text/code, Markdown, JSON, images, CSV/TSV, Parquet, Jupyter notebooks, and geospatial files inline
- Geospatial map viewer - Interactive GeoJSON/JSONL map mode with Map/Raw toggle, basemap switcher, thematic styling, feature hover metadata, and fit-to-bounds controls
- Git integration - Full git workflow: status, stage/unstage, commit, push/pull, branches, stash
- Granular git review - Accept/reject individual diff hunks (chunk-level stage/discard/unstage)
- Commit history - View commits, diffs, revert changes, reset to commit
- Code search - Search files with git grep from within the app
- Conversation forking - Fork from any message to explore alternative paths
- Worktree forks - Optionally fork into a dedicated git worktree to isolate changes, with optional local-state copy (uncommitted + local files)
- Branch visualization - Visual tree of conversation forks with navigation
- Edit auto-fork - Editing a message creates a fork instead of losing history
- Memory system - Save important context that persists across conversations (global or per-project)
- Claude Code - Full-featured integration with Claude CLI (default)
- OpenAI Codex - Codex CLI integration with GPT-5 Codex models
- Ollama - Local LLM support for free, offline conversations
- Per-conversation provider - Choose provider and model when creating conversations
- Provider-specific models - Access Claude models, Codex models (GPT-5.3/5.2 Codex), or Ollama models (Llama, Mistral, etc.)
- Swipe gestures - Swipe to reveal actions, swipe back to list
- Long-press menus - Context menus for cards and messages
- Voice input - Dictate messages using the Web Speech API (requires HTTPS)
- Text-to-speech - Listen to Claude's responses read aloud
- Safe area support - Proper handling of iOS notch and home indicator
- Keyboard shortcuts - Cmd+K (search), Cmd+N (new), Cmd+E (export)
- Desktop notifications - Get notified when Claude responds while tab is hidden
- Resizable panels - Drag to resize the file browser panel
- Full-text search - Search across conversation names and message content
- Semantic search - Find conversations by meaning using local AI embeddings (toggle with sparkle icon)
- Date & model filters - Filter search by date range or model
- Usage dashboard - Cost tracking, activity charts, streaks, and fun facts
- Offline support - Service worker caches the app shell for offline access
- Installable - Add to home screen on iOS/Android for a native app feel
- Multiple color themes - 8 built-in themes (Darjeeling, Budapest, Aquatic, Catppuccin, Fjord, Monokai, Moonrise, Paper) with light/dark variants
- Light/dark mode - Auto, light, or dark mode per theme
# Install dependencies
npm install
# Start the server
npm startThe app runs at https://localhost:3577 (or http:// if no certs are configured).
Note: On first use of semantic search, a ~23MB embedding model downloads automatically and is cached locally.
- Node.js (v18+)
- Claude CLI installed and authenticated (
claudemust be available on PATH) — required for Claude provider - Codex CLI installed and authenticated (
codexmust be available on PATH) — required for Codex provider - Ollama (optional) - Install from ollama.ai for local LLM support
mkdir -p certs
openssl req -x509 -newkey rsa:2048 \
-keyout certs/key.pem -out certs/cert.pem \
-days 365 -nodes -subj '/CN=localhost'The server auto-detects certs and enables HTTPS. Without certs, it falls back to HTTP.
Tailscale is the easiest way to access the app from your phone or anywhere:
- Install Tailscale on your server and mobile device
- Generate HTTPS certs:
tailscale cert your-machine.tailnet-name.ts.net - Copy certs to
certs/(rename tocert.pemandkey.pem) - Access via
https://your-machine.tailnet-name.ts.net:3577
No port forwarding, no exposing to the internet, and you get valid HTTPS certs.
- Create a conversation - Tap +, set a name and working directory
- Chat - Messages stream in real time; long-press for actions (fork, edit, copy)
- Files & Git - Use the file panel to browse files, stage changes, commit, and push
| Environment Variable | Default | Description |
|---|---|---|
PORT |
3577 |
Server port |
OLLAMA_HOST |
http://localhost:11434 |
Ollama API endpoint |
GOOGLE_APPLICATION_CREDENTIALS |
(unset) | Optional path to a service-account JSON for BigQuery ADC |
BIGQUERY_EXPORT_MAX_ROWS |
250000 |
Max rows allowed for full BigQuery save/download exports (0 disables limit) |
CONCIERGE_CLAUDE_CMD |
(unset) | Override Claude CLI command (default: claude on PATH) |
CONCIERGE_CLAUDE_ARGS |
(unset) | Extra args prepended to Claude CLI command (JSON array or quoted string) |
CONCIERGE_CODEX_CMD |
(unset) | Override Codex CLI command (default: codex on PATH) |
CONCIERGE_CODEX_ARGS |
(unset) | Extra args prepended to Codex CLI command (JSON array or quoted string) |
CONCIERGE_CLI_SKILLS_DIRS |
(unset) | Colon/semicolon-delimited skill dirs added via --add-dir for all CLI providers |
CONCIERGE_CLAUDE_SKILLS_DIRS |
(unset) | Additional skill dirs for Claude only |
CONCIERGE_CODEX_SKILLS_DIRS |
(unset) | Additional skill dirs for Codex only |
CONCIERGE_CLI_ENV_FILE |
(unset) | JSON file of env vars to merge into CLI process environment |
CONCIERGE_CLAUDE_ENV_FILE |
(unset) | JSON env overrides for Claude only |
CONCIERGE_CODEX_ENV_FILE |
(unset) | JSON env overrides for Codex only |
BigQuery uses Google Application Default Credentials (ADC). Typical local setup:
gcloud auth application-default login
gcloud config set project <project-id>- Backend: Node.js, Express, WebSocket (
ws), child_process, @xenova/transformers (embeddings), parquetjs-lite (data files) - Frontend: Vanilla JavaScript, HTML5, CSS3 (no framework, no bundler)
- Storage: JSON files on disk (
data/directory) — conversations, uploads, memories, embeddings - PWA: Service worker with cache-first strategy, web app manifest
concierge/
├── server.js # Express + WebSocket entry point
├── lib/
│ ├── routes/ # REST API endpoints
│ │ ├── conversations.js # Conversation CRUD, search, export, fork, compress
│ │ ├── git.js # Git operations
│ │ ├── files.js # File browser
│ │ ├── memory.js # Memory management
│ │ ├── capabilities.js # Provider/model capabilities
│ │ ├── preview.js # Live web preview server controls
│ │ ├── duckdb.js # DuckDB data analysis endpoints
│ │ ├── bigquery.js # BigQuery ADC + query endpoints
│ │ ├── workflow.js # Workflow locks + patch queue
│ │ └── helpers.js # Shared utilities
│ ├── providers/ # LLM provider system
│ │ ├── base.js # Base provider interface
│ │ ├── claude.js # Claude CLI provider
│ │ ├── codex.js # OpenAI Codex CLI provider
│ │ ├── ollama.js # Ollama provider
│ │ └── index.js # Provider registry
│ ├── claude.js # Backwards compat wrapper
│ ├── duckdb.js # DuckDB query helpers
│ ├── bigquery.js # BigQuery ADC/token/query helpers
│ ├── data.js # Data storage and persistence
│ ├── workflow/ # Locking + patch queue internals
│ └── embeddings.js # Semantic search with local embeddings
├── public/
│ ├── index.html # Single-page app HTML
│ ├── style.css # Main stylesheet (imports CSS modules)
│ ├── js/
│ │ ├── app.js # Frontend entry point
│ │ ├── state.js # Shared state management
│ │ ├── ui.js # UI interactions
│ │ ├── explorer/ # Shared file viewer shell, git controllers, geo preview
│ │ ├── file-panel/ # Conversation-scoped file panel
│ │ ├── files-standalone.js # Standalone cwd-scoped files/git view
│ │ └── ui/ # Modular UI features (stats, memory, voice, etc.)
│ ├── css/ # Modular stylesheets + themes/
│ ├── sw.js # Service worker
│ └── manifest.json # PWA manifest
├── data/ # Conversations, uploads, memories, embeddings (JSON files)
│ ├── index.json # Conversation metadata
│ ├── conv/ # Individual conversation messages
│ ├── uploads/ # File attachments
│ ├── memory/ # Global and project-scoped memories
│ └── embeddings.json # Semantic search vectors
├── certs/ # Optional HTTPS certificates
├── test/ # Unit tests
└── docs/
├── ARCHITECTURE.md # System architecture
├── FEATURES.md # Feature inventory
├── testing/ # Testing and coverage docs
│ └── COVERAGE_BASELINE.md
└── REFERENCE.md # Developer quick reference
npm test # Run unit tests
npm run lint # Run ESLint
npm run test:coverage # Run tests with coverage + summary
npm run test:coverage -- --line-min=45 # Optional coverage threshold gate- Architecture Guide - Detailed system design, data flow, APIs, and component breakdown
- Feature Catalog - Canonical list of user-facing capabilities
- Developer Reference - Quick-reference for file map, data models, functions, and common patterns
- Coverage Baseline - Current coverage snapshot and milestone targets
MIT
