Thin CLI client for Zylch AI - your AI assistant for email, calendar, and relationship intelligence.
The CLI is a thin client that communicates with the Zylch API server. All business logic, AI processing, and data storage happens on the server. The CLI handles:
- User authentication (Firebase OAuth via browser)
- Service connections (Google, Microsoft, Anthropic)
- Interactive chat with slash command support
- Local caching for offline access
- Modifier queue for offline operations
┌─────────────┐ HTTP API ┌──────────────┐
│ Zylch CLI │ ───────────────────────► │ Zylch Server │
│ (Thin) │ ◄─────────────────────── │ (FastAPI) │
└─────────────┘ └──────────────┘
│ │
▼ ▼
Local Cache Supabase
(SQLite) (PostgreSQL)
pip install zylch-cligit clone https://github.com/malemi/zylch-cli.git
cd zylch-cli
pip install -e .# Start the CLI (connects to production server by default)
zylch
# Or connect to a specific server
zylch --server-url http://localhost:9000Configuration is stored in ~/.zylch/cli_config.json:
{
"api_server_url": "https://api.zylchai.com",
"session_token": "",
"owner_id": "",
"email": "",
"local_db_path": "~/.zylch/local_data.db",
"enable_offline": true,
"max_offline_days": 7,
"auto_sync_on_start": false
}| Command | Description |
|---|---|
/login |
Login via browser (Firebase OAuth) |
/logout |
Logout and clear session |
/status |
Show CLI status and cache stats |
/new |
Start new conversation |
/quit, /exit |
Exit Zylch |
| Command | Description |
|---|---|
/connect |
Show all service connection status |
/connect anthropic |
Set your Anthropic API key (required for chat) |
/connect google |
Connect Google (Gmail, Calendar) via OAuth |
/connect microsoft |
Connect Microsoft (Outlook, Calendar) |
/connect --reset |
Disconnect all services |
| Command | Description |
|---|---|
/sync [days] |
Sync emails & calendar from connected services |
/gaps |
Show relationship gaps analysis |
/briefing |
Get daily briefing |
/archive |
Email archive management (--help for details) |
/cache |
Cache management (--help for details) |
| Command | Description |
|---|---|
/memory |
Behavioral memory management (--help for details) |
/model [haiku|sonnet|opus|auto] |
Switch AI model tier |
/trigger |
Event automation (--help for details) |
| Command | Description |
|---|---|
/share <email> |
Share data with another user |
/revoke <email> |
Revoke sharing access |
/sharing |
Show current sharing status |
| Command | Description |
|---|---|
/mrcall |
Link to MrCall assistant |
/tutorial |
Interactive tutorial |
/help |
Show all commands |
- User runs
/login - CLI starts local HTTP server on
localhost:8765 - Browser opens to
{server}/api/auth/oauth/initiate - User completes Firebase/Google OAuth in browser
- Server redirects to
localhost:8765/callback?token=... - CLI captures JWT token, saves to config
- Token used for all subsequent API calls
Token Expiry: Firebase JWT tokens expire after ~1 hour. The CLI checks token expiry locally before making requests. If expired, user is prompted to /login again.
- User runs
/connect google - CLI calls
/api/auth/google/authorizeto get OAuth URL - Browser opens to Google consent screen
- User authorizes Gmail/Calendar access
- Callback stores tokens in Supabase (server-side)
- CLI receives success confirmation
Important: OAuth tokens are stored in Supabase, not locally. This allows the same credentials to work across CLI and web dashboard.
The CLI includes offline capabilities:
-
Local Cache: SQLite database at
~/.zylch/local_data.db- Cached emails, calendar events, contacts
- 7-day TTL for cached data
-
Modifier Queue: Operations queued when offline
- Email drafts, sends
- Calendar event creation
- Synced when connection restored via
POST /api/data/modifier
zylch-cli/
├── zylch_cli/
│ ├── __init__.py
│ ├── cli.py # Main CLI (Click + Rich + prompt_toolkit)
│ ├── api_client.py # HTTP client for Zylch API
│ ├── config.py # Configuration + JWT parsing
│ ├── oauth_handler.py # Browser OAuth flow
│ ├── local_storage.py # SQLite cache
│ └── modifier_queue.py # Offline operation queue
├── pyproject.toml # Poetry configuration
└── README.md
| File | Purpose |
|---|---|
cli.py |
Main entry point, slash commands, chat loop with autocomplete |
api_client.py |
All HTTP calls to api.zylchai.com |
config.py |
Load/save config, JWT expiry parsing |
oauth_handler.py |
Local callback server for OAuth |
local_storage.py |
SQLite caching for offline access |
modifier_queue.py |
Queue offline operations for later sync |
POST /api/auth/login- Login with Firebase tokenPOST /api/auth/logout- Invalidate sessionGET /api/auth/session- Get session infoPOST /api/auth/refresh- Refresh token (exists but not auto-used)
GET /api/auth/google/status- Check Google connectionGET /api/auth/google/authorize- Get Google OAuth URLPOST /api/auth/google/revoke- Disconnect GoogleGET /api/auth/anthropic/status- Check Anthropic keyPOST /api/auth/anthropic/key- Save Anthropic API keyPOST /api/auth/anthropic/revoke- Delete Anthropic key
POST /api/chat/message- Send message (includes slash commands)GET /api/chat/history- Get conversation history
GET /api/data/emails- List email threadsGET /api/data/calendar- List calendar eventsGET /api/data/contacts- List contactsPOST /api/data/modifier- Apply offline modifications
GET /health- Server health check
# Install with dev dependencies
pip install -e ".[dev]"
# Run CLI
zylch
# Run tests
pytest
# Format code
black zylch_cli/
ruff check zylch_cli/| Service | URL |
|---|---|
| API Server | https://api.zylchai.com |
| Web Dashboard | https://app.zylchai.com |
| Website | https://zylchai.com |
-
Token Refresh: The
refresh_token()method exists but isn't called automatically. Users must manually/loginwhen token expires. -
Microsoft Support: Endpoints exist but not fully implemented yet.
-
Keychain Storage: Tokens stored in plaintext JSON. TODO: Use system keychain.
- Access Google/Microsoft APIs directly (server handles this)
- Store OAuth credentials locally (only session token)
- Process emails/calendar locally (server-side)
- Run AI models (server uses your Anthropic key)
All business logic lives on the server (api.zylchai.com).