| Dimension | Shared | Only in A | Only in B | Overlap |
|---|---|---|---|---|
| Sections | 1 | 7 | 5 | 8% |
| Commands | 0 | 5 | 1 | 0% |
| Section tags | 3 | 2 | 2 | 43% |
What each file covers
Sections
1 shared · 7 only in A · 5 only in B- − Gemini Code Assistant Guide for Hovimestari
- − Project Overview
- − Core Architecture & Key Files
- − Developer Workflow & Commands
- − Import calendar events
- − Generate the daily brief
- − Project Conventions
- + Code Style
- + Error Handling
- + Dependencies
- + Development
- + Libraries
- Testing
Commands
0 shared · 5 only in A · 1 only in B- − task build
- − task test
- − task lint
- − task deps
- − go.mod
- + go mod tidy
Section tags
3 shared · 2 only in A · 2 only in B- − architecture
- − agent-behaviour
- + lint-format
- + dependencies
- test
- code-style
- testing-strategy
Line diff
lepinkainen/hovimestari · GEMINI.md
@@ −1 @@
1# Gemini Code Assistant Guide for Hovimestari
2
3This guide provides essential information for AI code assistants working on the Hovimestari project.
4
5## Project Overview
6
7Hovimestari 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.
8
9- **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.
12
13## Core Architecture & Key Files
14
15The project follows a modular structure, separating concerns into distinct packages within the `internal/` directory.
16
17- **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.
25
26## Developer Workflow & Commands
27
28This project uses [Task](https://taskfile.dev/) as a command runner instead of Make. All common development tasks are defined in `Taskfile.yml`.
29
30- **Build the application**:
31
32 ```bash
33 task build
34 ```
35
36- **Run all tests**:
37
38 ```bash
39 task test
40 ```
41
42- **Run linter**:
43
44 ```bash
45 task lint
46 ```
47
48- **Tidy dependencies**:
49
50 ```bash
51 task deps
52 ```
53
54Application commands are executed via the compiled binary. For example:
55
56```bash
57# Import calendar events
58./build/hovimestari import-calendar
59
60# Generate the daily brief
61./build/hovimestari generate-brief
62```
63
64## Project Conventions
65
66- **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.
71
72## Testing
73
74- 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
lepinkainen/hovimestari · .clinerules/go-codestyle.md
@@ +1 @@
1### Code Style
2
3- Follow standard Go code style and conventions (gofmt).
4- Use meaningful variable and function names.
5- Add comments for exported functions and types.
6- Keep functions small and focused on a single responsibility.
7
8### Error Handling
9
10- Use the `fmt.Errorf("failed to X: %w", err)` pattern for error wrapping.
11- Always check errors and provide context.
12- Avoid panics in production code.
13
14### Dependencies
15
16- Prefer standard library solutions when possible, suggest libraries when appropriate.
17- Don't write solutions from scratch if a well-known and widely used library exists
18- Minimize external dependencies, unless an external dependency makes the code more cleaner or efficient.
19- Pin dependency versions in go.mod.
20- Run `go mod tidy` after adding new libraries
21
22### Testing
23
24- Write unit tests for core functionality.
25- Use table-driven tests where appropriate.
26- Mock external dependencies for testing.
27
28### Development
29
30- Run unit tests after a task is complete and confirm that they pass
31
32### Libraries
33
34- For CLI tools use spf13/cobra to generate commands and subcommands
35- Use spf13/viper to manage configuration
36- If Sqlite is used, use modernc.org/sqlite as the library, because it works even when cross-compiled
37- Use slog for logging and fmt.Printf for interactive output
38
@@ −1 +1 @@
1−# Gemini Code Assistant Guide for Hovimestari
1+### Code Style
22
3−This guide provides essential information for AI code assistants working on the Hovimestari project.
3+- Follow standard Go code style and conventions (gofmt).
4+- Use meaningful variable and function names.
5+- Add comments for exported functions and types.
6+- Keep functions small and focused on a single responsibility.
47
5−## Project Overview
8+### Error Handling
69
7−Hovimestari 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.
10+- Use the `fmt.Errorf("failed to X: %w", err)` pattern for error wrapping.
11+- Always check errors and provide context.
12+- Avoid panics in production code.
813
9−- **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.
14+### Dependencies
1215
13−## Core Architecture & Key Files
16+- Prefer standard library solutions when possible, suggest libraries when appropriate.
17+- Don't write solutions from scratch if a well-known and widely used library exists
18+- Minimize external dependencies, unless an external dependency makes the code more cleaner or efficient.
19+- Pin dependency versions in go.mod.
20+- Run `go mod tidy` after adding new libraries
1421
15−The project follows a modular structure, separating concerns into distinct packages within the `internal/` directory.
22+### Testing
1623
17−- **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.
24+- Write unit tests for core functionality.
25+- Use table-driven tests where appropriate.
26+- Mock external dependencies for testing.
2527
26−## Developer Workflow & Commands
28+### Development
2729
28−This project uses [Task](https://taskfile.dev/) as a command runner instead of Make. All common development tasks are defined in `Taskfile.yml`.
30+- Run unit tests after a task is complete and confirm that they pass
2931
30−- **Build the application**:
32+### Libraries
3133
32− ```bash
33− task build
34− ```
35−
36−- **Run all tests**:
37−
38− ```bash
39− task test
40− ```
41−
42−- **Run linter**:
43−
44− ```bash
45− task lint
46− ```
47−
48−- **Tidy dependencies**:
49−
50− ```bash
51− task deps
52− ```
53−
54−Application commands are executed via the compiled binary. For example:
55−
56−```bash
57−# Import calendar events
58−./build/hovimestari import-calendar
59−
60−# Generate the daily brief
61−./build/hovimestari generate-brief
62−```
63−
64−## Project Conventions
65−
66−- **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.
71−
72−## Testing
73−
74−- 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`.
34+- For CLI tools use spf13/cobra to generate commands and subcommands
35+- Use spf13/viper to manage configuration
36+- If Sqlite is used, use modernc.org/sqlite as the library, because it works even when cross-compiled
37+- Use slog for logging and fmt.Printf for interactive output
7738
