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.yamlwith environment overrides. - Interactive chat loop: Command-driven conversation with OpenAI-compatible models.
- Persistent history: Sessions and messages are stored in SQLite, allowing
/openand/renamecommands. - 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
go install github.com/stig/goaichat/cmd/goaichat@latest
Alternatively, clone the repository and build locally:
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:
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_URLGOAICHAT_API_KEY
Running
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 <name>– load a previously saved session by name./rename <name>– 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 <suggested-name> 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.mdfor milestone progression.
License
This project is licensed under the MIT License.