RuleStack

Configs

Stacks

Compare

Diff

RuleStack

Configs

Stacks

Compare

Diff

Read API

RuleStack

Configs

Stacks

Compare

Diff

Read API

Diff/lepinkainen-hovimestari-gemini ↔ lepinkainen-hovimestari-agents

Comparison

A · GEMINI.md · lepinkainen/hovimestariB · AGENTS.md · lepinkainen/hovimestari
What each file covers, counted
DimensionSharedOnly in AOnly in BOverlap
Sections0870%
Commands32725%
Section tags32530%

What each file covers

Sections

0 shared · 8 only in A · 7 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
  • − Testing
  • + Repository Guidelines
  • + Project Structure & Module Organization
  • + Build, Test, and Development Commands
  • + Coding Style & Naming Conventions
  • + Testing Guidelines
  • + Commit & Pull Request Guidelines
  • + Configuration & Secrets

Commands

3 shared · 2 only in A · 7 only in B
  • − task deps
  • − go.mod
  • + task run -- generate-brief
  • + go test ./...
  • + go build ./cmd/hovimestari
  • + go test ./internal/...
  • + go test -cover ./...
  • + git log
  • + task
  •   task build
  •   task test
  •   task lint

Section tags

3 shared · 2 only in A · 5 only in B
  • − testing-strategy
  • − agent-behaviour
  • + build
  • + lint-format
  • + git-pr
  • + security
  • + do-not
  •   test
  •   code-style
  •   architecture

Line diff

+30 added−70 removed7 unchanged9.1% identical
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 · AGENTS.md
@@ +1 @@
1# Repository Guidelines
2 
3## Project Structure & Module Organization
4- Entry point lives in `cmd/hovimestari`, wiring the CLI with Kong.
5- Domain logic sits under `internal/*`: `brief` assembles daily briefs, `importer` handles calendar/weather ingestion, `store` wraps SQLite access, and `output` manages delivery channels.
6- Shared prompt artifacts reside in `llm-shared/`; background documentation sits in `docs/`.
7- Tests stay alongside sources as `_test.go` files; builds land in `build/`, and `config.example.json` documents configurable fields.
8 
9## Build, Test, and Development Commands
10- `task build` runs lint and tests before emitting `build/hovimestari`.
11- `task run -- generate-brief` rebuilds then invokes the binary; append any CLI subcommand after `--`.
12- `task test` wraps `go test ./...`; add flags like `-race` or `-run` when needed.
13- `task lint` requires `golangci-lint` in `PATH`; install via `brew install golangci-lint` or the official script.
14- For quick iteration use `go build ./cmd/hovimestari` or `go test ./internal/...` directly.
15 
16## Coding Style & Naming Conventions
17- Always format with `gofmt` (or `goimports`); Task targets assume formatted code.
18- Keep package names aligned with directory names (e.g., `internal/weather`, `internal/output`).
19- Exported symbols use CamelCase plus short doc comments; file-level helpers stay lowerCamelCase.
20- Configuration structs belong in `internal/config`; JSON keys mirror `config.example.json` using lower_case.
21 
22## Testing Guidelines
23- Use Go's `testing` package with table-driven cases and `_test.go` suffixes.
24- Stub external services by faking interfaces in `internal/llm` or `internal/importer`; avoid live API calls.
25- Run `task test` (or `go test ./...`) before pushing; for coverage snapshots, run `go test -cover ./...`.
26 
27## Commit & Pull Request Guidelines
28- Follow Conventional Commits (`feat:`, `fix:`, `chore:`) as in `git log`; keep subjects imperative under ~72 chars.
29- Group related changes per commit and document breaking changes in the body if applicable.
30- PRs should summarize behavior changes, list validation commands, and link issues (`Fixes #12`).
31- Attach CLI transcripts or config snippets when altering user workflows or outputs.
32 
33## Configuration & Secrets
34- Use `config.example.json` as the starting point; do not commit populated `config.json`, `.env`, or `memories.db`.
35- Secrets load from `.env`, `$HOME/.hovimestari.env`, or environment variables before running `task` targets.
36- Document new configuration flags in `docs/04_configuration.md` and update sample values in `config.example.json`.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
37 
@@ −1 +1 @@
1−# Gemini Code Assistant Guide for Hovimestari
1+# Repository Guidelines
22  
3−This guide provides essential information for AI code assistants working on the Hovimestari project.
3+## Project Structure & Module Organization
4+- Entry point lives in `cmd/hovimestari`, wiring the CLI with Kong.
5+- Domain logic sits under `internal/*`: `brief` assembles daily briefs, `importer` handles calendar/weather ingestion, `store` wraps SQLite access, and `output` manages delivery channels.
6+- Shared prompt artifacts reside in `llm-shared/`; background documentation sits in `docs/`.
7+- Tests stay alongside sources as `_test.go` files; builds land in `build/`, and `config.example.json` documents configurable fields.
48  
5−## Project Overview
9+## Build, Test, and Development Commands
10+- `task build` runs lint and tests before emitting `build/hovimestari`.
11+- `task run -- generate-brief` rebuilds then invokes the binary; append any CLI subcommand after `--`.
12+- `task test` wraps `go test ./...`; add flags like `-race` or `-run` when needed.
13+- `task lint` requires `golangci-lint` in `PATH`; install via `brew install golangci-lint` or the official script.
14+- For quick iteration use `go build ./cmd/hovimestari` or `go test ./internal/...` directly.
615  
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.
16+## Coding Style & Naming Conventions
17+- Always format with `gofmt` (or `goimports`); Task targets assume formatted code.
18+- Keep package names aligned with directory names (e.g., `internal/weather`, `internal/output`).
19+- Exported symbols use CamelCase plus short doc comments; file-level helpers stay lowerCamelCase.
20+- Configuration structs belong in `internal/config`; JSON keys mirror `config.example.json` using lower_case.
821  
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.
22+## Testing Guidelines
23+- Use Go's `testing` package with table-driven cases and `_test.go` suffixes.
24+- Stub external services by faking interfaces in `internal/llm` or `internal/importer`; avoid live API calls.
25+- Run `task test` (or `go test ./...`) before pushing; for coverage snapshots, run `go test -cover ./...`.
1226  
13−## Core Architecture & Key Files
27+## Commit & Pull Request Guidelines
28+- Follow Conventional Commits (`feat:`, `fix:`, `chore:`) as in `git log`; keep subjects imperative under ~72 chars.
29+- Group related changes per commit and document breaking changes in the body if applicable.
30+- PRs should summarize behavior changes, list validation commands, and link issues (`Fixes #12`).
31+- Attach CLI transcripts or config snippets when altering user workflows or outputs.
1432  
15−The 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− 
28−This 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− 
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`.
33+## Configuration & Secrets
34+- Use `config.example.json` as the starting point; do not commit populated `config.json`, `.env`, or `memories.db`.
35+- Secrets load from `.env`, `$HOME/.hovimestari.env`, or environment variables before running `task` targets.
36+- Document new configuration flags in `docs/04_configuration.md` and update sample values in `config.example.json`.
7737  
RuleStack

Built by

Kynth Studio

Directory

Configs
Stacks
Compare formats
Diff two configs
Best AGENTS.md examples

Formats

AGENTS.md
CLAUDE.md
Cursor rules
Copilot instructions

Reference

Read API
Corpus health
Privacy Policy
Terms

RuleStack

RuleStack

Built by

Kynth Studio

Directory

Configs
Stacks
Compare formats
Diff two configs
Best AGENTS.md examples

Formats

AGENTS.md
CLAUDE.md
Cursor rules
Copilot instructions

Reference

Read API
Corpus health
Privacy Policy
Terms

RuleStack

RuleStack

Built by

Kynth Studio

Directory

Configs
Stacks
Compare formats
Diff two configs
Best AGENTS.md examples

Formats

AGENTS.md
CLAUDE.md
Cursor rules
Copilot instructions

Reference

Read API
Corpus health
Privacy Policy
Terms

RuleStack