# CLAUDE.md

This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.

## Commands

### Build & Run
```bash
# Build all workspace members
cargo build

# Build specific package
cargo build -p kordophone
cargo build -p kordophone-db  
cargo build -p kordophoned
cargo build -p kpcli

# Run daemon
cargo run --bin kordophoned

# Run CLI tool
cargo run --bin kpcli -- --help
```

### Testing
```bash
# Run all tests
cargo test

# Run tests for specific package
cargo test -p kordophone
cargo test -p kordophone-db
```

### Database Operations
```bash
# Database migrations (from kordophone-db directory)
cd kordophone-db
diesel migration run
diesel migration revert
```

## Architecture

This is a Rust workspace with 4 main packages forming a messaging client/daemon system:

### Core Components

- **kordophone**: Core library providing API client and models for messaging operations
- **kordophone-db**: Database layer using Diesel ORM with SQLite, handles conversations/messages storage
- **kordophoned**: Background daemon that syncs with messaging server and exposes D-Bus interface
- **kpcli**: Command-line interface for interacting with daemon and performing database operations

### Key Architecture Patterns

- **D-Bus IPC**: Daemon exposes functionality via D-Bus at `net.buzzert.kordophonecd`
- **Event-driven**: Daemon uses async channels for internal communication and D-Bus signals for external notifications
- **Repository Pattern**: Database access abstracted through repository layer in kordophone-db
- **Workspace Dependencies**: Packages depend on each other (kordophoned uses both kordophone and kordophone-db)

### Data Flow

1. kpcli/external clients interact with kordophoned via D-Bus
2. kordophoned manages HTTP API client connections to messaging server
3. Background sync processes fetch data and store via kordophone-db repository
4. D-Bus signals notify clients of data updates (ConversationsUpdated, MessagesUpdated)

### Important Files

- `kordophone-db/diesel.toml`: Database configuration
- `kordophone-db/migrations/`: Database schema definitions
- `kordophoned/include/net.buzzert.kordophonecd.Server.xml`: D-Bus interface definition
- `*/build.rs`: D-Bus code generation for dbus-crossroads interfaces

### Settings Storage

Settings are persisted in SQLite database using a key-value store approach. Access via `Settings` struct in kordophone-db.