# Goaichat Goaichat is a terminal-based AI chat client written in Go. It connects to OpenAI-compatible APIs using configuration supplied via `config.yaml` and environment variables. ## Features - **Config-driven startup**: Loads defaults from `config.yaml` with environment overrides. - **Interactive chat loop**: Command-driven conversation with OpenAI-compatible models. - **Persistent history**: Sessions and messages are stored in SQLite, allowing `/open` and `/rename` commands. - **Session naming assistance**: The assistant suggests descriptive session names that you can adopt. - **Extensible architecture**: Structured packages under `internal/` for configuration, chat orchestration, storage, OpenAI client integration, and CLI wiring. ## Getting Started ### Prerequisites - Go 1.23 or later - Access to an OpenAI-compatible API endpoint ### Installation ```bash go install github.com/stig/goaichat/cmd/goaichat@latest ``` Alternatively, clone the repository and build locally: ```bash git clone https://github.com/stig/goaichat.git cd goaichat go build ./cmd/goaichat ``` ### Configuration Create `config.yaml` in the project root or pass `--config` to specify a path. When no path is provided, Goaichat searches the current working directory first and then `$HOME/.config/goaichat/config.yaml`. A minimal configuration looks like: ```yaml api: url: "https://api.openai.com/v1" key: "${GOAICHAT_API_KEY}" model: name: "gpt-4o-mini" temperature: 0.7 stream: true ui: show_timestamps: true logging: level: "info" ``` Environment variables override several fields: - `GOAICHAT_API_URL` - `GOAICHAT_API_KEY` ### Running ```bash go run ./cmd/goaichat --config path/to/config.yaml ``` ### Usage After launching, type messages at the prompt. The following commands are available: - `/help` – display available commands. - `/reset` – clear the current in-memory conversation. - `/list` – list saved sessions with summaries. - `/open ` – load a previously saved session by name. - `/rename ` – assign a new name to the current session (use suggestions or provide your own). - `/exit` – quit the application. The assistant proposes session name suggestions after the first reply in a session. Use `/rename ` to accept them quickly. ### Persistence Goaichat uses SQLite for storage. On first run, the application applies migrations from `internal/storage/migrations/`. Sessions are automatically created when you begin chatting, and every message is stored for later retrieval. By default the database is stored at `$HOME/.local/share/goaichat/goaichat.db`. You can override the location via the `storage.path` or `storage.base_dir` settings in `config.yaml`. ## Development - Run tests with `go test ./...`. - Follow the roadmap in `dev-plan.md` for milestone progression. ## License This project is licensed under the [MIT License](LICENSE).