GEMINI.md
GEMINI.mdGEMINI.mdroot
Quality
81/100
Scores the file, not the repository.Length
480 words
8 headings · 5 code blocksRepository
0
— · pushed 31 days agoLast changed
3 days ago
First indexed 3 days ago.1# Gemini Code Assistant Guide for Hovimestari23This guide provides essential information for AI code assistants working on the Hovimestari project.45## Project Overview67Hovimestari is a personal AI butler assistant written in Go. It gathers information from various sources (calendars, weather APIs, manual input), stores them as "memories" in a SQLite database, and uses a Large Language Model (LLM) to generate a personalized daily brief.89- **Inspiration**: [Geoffrey Litt's AI assistant](https://www.geoffreylitt.com/2025/04/12/how-i-made-a-useful-ai-assistant-with-one-sqlite-table-and-a-handful-of-cron-jobs)10- **Name**: "Hovimestari" is Finnish for "Butler".11- **Primary Language**: Briefs are generated in Finnish by default, but the codebase, comments, and logs are in English.1213## Core Architecture & Key Files1415The project follows a modular structure, separating concerns into distinct packages within the `internal/` directory.1617- **Entry Point**: `cmd/hovimestari/main.go` initializes the [Cobra](https://github.com/spf13/cobra) CLI.18- **CLI Commands**: Each command is a separate file in `cmd/hovimestari/commands/`.19- **Configuration**: `internal/config/viper.go` manages configuration using [Viper](https://github.com/spf13/viper), supporting file-based (`config.json`), environment variables, and XDG standard directories (`~/.config/hovimestari/`).20- **Database**: `internal/store/store.go` handles all interactions with the SQLite database (`memories.db`). It uses `modernc.org/sqlite` for CGO-free compilation. All data is stored in a single `memories` table.21- **Brief Generation**: `internal/brief/brief.go` orchestrates the collection of memories and context to generate the final brief via the LLM.22- **LLM Interaction**: `internal/llm/gemini.go` contains the client for the Google Gemini API. Prompts are stored in `prompts.json`.23- **Importers**: Data sources are implemented as importers in `internal/importer/`. For example, `internal/importer/calendar/calendar.go` handles iCalendar/WebCal imports.24- **Output**: `internal/output/` contains a multi-destination system to send briefs to the CLI, Discord, and Telegram.2526## Developer Workflow & Commands2728This project uses [Task](https://taskfile.dev/) as a command runner instead of Make. All common development tasks are defined in `Taskfile.yml`.2930- **Build the application**:3132```bash33 task build34```3536- **Run all tests**:3738```bash39 task test40```4142- **Run linter**:4344```bash45 task lint46```4748- **Tidy dependencies**:4950```bash51 task deps52```5354Application commands are executed via the compiled binary. For example:5556```bash57# Import calendar events58./build/hovimestari import-calendar5960# Generate the daily brief61./build/hovimestari generate-brief62```6364## Project Conventions6566- **Error Handling**: Use the `fmt.Errorf("...: %w", err)` pattern to wrap and add context to errors.67- **Logging**: The project uses the standard `log/slog` library with a custom human-readable handler in `internal/logging/handler.go`. Use this for all logging.68- **Dependencies**: Use the standard library where possible. For external dependencies, ensure they are added to `go.mod` and run `task deps`.69- **Configuration**: When adding new configuration options, update the `Config` struct in `internal/config/viper.go` and the `config.example.json` file.70- **Adding a Command**: To add a new CLI command, create a new file in `cmd/hovimestari/commands/` and add it to the root command in `cmd/hovimestari/main.go`. Follow the existing Cobra command structure.7172## Testing7374- Tests are located in `*_test.go` files alongside the code they test.75- Tests should be deterministic and not rely on external services (network, LLM APIs, or the database). Mock these dependencies where necessary.76- Run all tests using `task test`.77
Also in lepinkainen/hovimestari
Diff this repo’s formatsOne repository carrying more than one format is the comparison this product exists for: does anyone actually write different content in each file, or is one a copy of the other?
| Repository | Format | Stack | Covers | Score | Changed |
|---|---|---|---|---|---|
| lepinkainen/hovimestari.clinerules/project.md · 0 | Cline rules | archtypesdatabaseagent-behaviour+1 | 58/100 | 3 days ago | |
| lepinkainen/hovimestari.clinerules/go-codestyle.md · 0 | Cline rules | testlint-formatstyletesting-strategy+1 | 64/100 | 3 days ago | |
| lepinkainen/hovimestariCLAUDE.md · 0 | CLAUDE.md | buildteststylearch+2 | 89/100 | 3 days ago | |
| lepinkainen/hovimestariAGENTS.md · 0 | AGENTS.md | buildtestlint-formatstyle+4 | 86/100 | 3 days ago |
Similar configs
Same format, overlapping stack, ranked by quality.
| Repository | Format | Stack | Covers | Score | Changed |
|---|---|---|---|---|---|
| google-gemini/gemini-cliGEMINI.md · 106k | GEMINI.md | setupbuildtestlint-format+6 | 91/100 | 3 days ago | |
| diegosouzapw/OmniRouteGEMINI.md · 38k | GEMINI.md | testlint-formatarchsecurity+2 | 87/100 | 3 days ago | |
| compozy/gographGEMINI.md · 9 | GEMINI.md | setuptestlint-formatarch+4 | 86/100 | 3 days ago | |
| firebase/flutterfireGEMINI.md · 9.2k | GEMINI.md | lint-formatstylearchdo-not+1 | 80/100 | 3 days ago | |
| zigcc/zig-cookbookGEMINI.md · 1.2k | GEMINI.md | setupbuildlint-formatstyle+3 | 79/100 | 3 days ago | |
| lepinkainen/humanlogGEMINI.md · 0 | GEMINI.md | buildteststylearch+2 | 79/100 | 3 days ago | |
| iloveitaly/llm-ide-rulesGEMINI.md · 13 | GEMINI.md | setupteststyletypes+7 | 77/100 | 3 days ago | |
| nodejs/nodedeps/v8/GEMINI.md · 119k | GEMINI.md | buildteststylearch+4 | 77/100 | 3 days ago |
