githubinferredactive
rei
provenance:github:mikoto2000/rei
AI 秘書になる予定のモノ
README
# Rei
Rei は、ローカルで動かす AI 秘書シェルです。OpenAI 互換 API を使った対話に加え、Google Calendar、タスク管理、日次ブリーフィング、リマインド、文書埋め込みを扱えます。
## 主な機能
- OpenAI 互換 API を使った対話
- `model` / `models` による chat モデルの確認・切り替え
- Google Calendar の認可、予定一覧、予定追加
- タスクの追加、一覧、完了、削除
- その日の予定・未完了タスク・関連文書をまとめる日次ブリーフィング
- 指定日時または予定の何分前かでのリマインド
- 文書をベクトルストアへ埋め込んだうえでの RAG
- Brave Search API を使った Web 検索ツール
- JSON 設定で登録した MCP サーバーのツール利用
## セットアップ
### OpenAI Compatible API
最低限必要な設定:
```bash
export REI_OPENAI_BASE_URL=https://api.openai.com
export REI_OPENAI_API_KEY=your-api-key
export REI_OPENAI_CHAT_MODEL=gpt-5.4
export REI_OPENAI_EMBEDDING_MODEL=text-embedding-3-small
```
`REI_OPENAI_BASE_URL` には OpenAI 互換 API のベース URL を設定してください。
サーバーによっては `https://host/v1` まで含める構成が必要です。
### Google Calendar
Google Calendar 連携を有効にする場合は、Google Cloud で Desktop app の OAuth クライアントを作成し、資格情報 JSON を `REI_GOOGLE_CALENDAR_CREDENTIALS_PATH` に配置してください。
```bash
export REI_GOOGLE_CALENDAR_ENABLED=true
export REI_GOOGLE_CALENDAR_CREDENTIALS_PATH=$HOME/.config/rei/google-calendar-credentials.json
export REI_GOOGLE_CALENDAR_TIME_ZONE=Asia/Tokyo
```
Google Calendar の資格情報と OAuth token は、デフォルトではホームディレクトリ配下の `.config/rei` に保存されます。必要に応じて `REI_GOOGLE_CALENDAR_CREDENTIALS_PATH` と `REI_GOOGLE_CALENDAR_TOKENS_DIR` で上書きできます。
### Web Search
Web 検索を有効にする場合は Brave Search API を設定してください。
```bash
export REI_WEB_SEARCH_ENABLED=true
export REI_WEB_SEARCH_API_KEY=your-brave-search-api-key
```
必要に応じて次も指定できます。
```bash
export REI_WEB_SEARCH_BASE_URL=https://api.search.brave.com/res/v1/web/search
export REI_WEB_SEARCH_TIMEOUT_SECONDS=10
export REI_WEB_SEARCH_MAX_RESULTS=5
```
### MCP
MCP サーバーを有効にする場合は、JSON 設定ファイルを用意してください。
```bash
export REI_MCP_ENABLED=true
export REI_MCP_STDIO_SERVERS_CONFIG=file:$PWD/.rei/mcp-servers.json
```
`.rei/mcp-servers.json` は Claude Desktop 互換形式です。
```json
{
"mcpServers": {
"filesystem": {
"command": "npx",
"args": [
"-y",
"@modelcontextprotocol/server-filesystem",
"/workspaces/rei"
]
}
}
}
```
登録した MCP ツールは起動時に読み込まれ、通常の AI ツールと同様にチャット中に自動利用されます。設定変更の反映には再起動が必要です。
## 使い方
起動:
```bash
./mvnw spring-boot:run
```
アプリが生成する履歴ファイルと SQLite のローカルデータは、起動したカレントディレクトリ配下の `.rei` に保存されます。
対話:
```text
こんにちは
今日の予定を教えて
明日の朝に確認したいタスクを追加して
```
### モデル
現在モデルの確認・変更:
```text
/model
/model gpt-4.1-mini
```
指定可能なモデル一覧の確認:
```text
/models
```
`models` は接続先の OpenAI 互換 API が `/v1/models` を実装している前提です。
### Google Calendar
初回認可:
```text
/schedule auth
```
予定一覧:
```text
/schedule list --date 2026-03-23
/schedule list --from 2026-03-23T00:00:00+09:00 --to 2026-03-23T23:59:59+09:00
```
予定追加:
```text
/schedule add --start 2026-03-23T09:00:00+09:00 --end 2026-03-23T10:00:00+09:00 定例会議
/schedule add --start 2026-03-23T09:00:00 --end 2026-03-23T10:00:00 --location 会議室A 設計レビュー
```
オフセットなし日時は `REI_GOOGLE_CALENDAR_TIME_ZONE` を基準に解釈されます。
### タスク管理
追加:
```text
/task add --due 2026-04-03 --priority 2 --tag sales,document 提案書作成
```
一覧:
```text
/task list
/task list --priority 2
/task list --tag sales
/task list --due-before 2026-04-03
```
完了・削除:
```text
/task done 1
/task delete 1
```
### 日次ブリーフィング
```text
/briefing today
```
その日の予定、未完了タスク、関連文書、注意点、次アクションをまとめて表示します。
### リマインド
指定日時で追加:
```text
/reminder add --at 2026-03-27T09:00:00+09:00 顧客に返信する
```
基準日時の何分前かで追加:
```text
/reminder add --target 2026-03-27T14:00:00+09:00 --minutes-before 15 今日の 14:00 からの会議
```
一覧・削除:
```text
/reminder list
/reminder delete 1
```
通知は現状、標準出力へ出ます。
### 文書の埋め込み
追加:
```text
/embed ./docs/spec.md ./docs/meeting-note.pdf
/embed add ./docs/spec.md ./docs/meeting-note.pdf
```
検索:
```text
/embed search spring ai
/embed search --top-k 5 --source /absolute/path/to/spec.md spring ai
```
一覧・削除:
```text
/embed list
/embed delete --doc-id <docId>
/embed delete --source /absolute/path/to/spec.md
```
読み込んだ文書はベクトルストアに保存され、対話時の RAG に使われます。
現状のベクトルストアは、起動したカレントディレクトリ配下の `.rei/memory.db` にある SQLite に保存されます。埋め込みベクトルは `float32` 配列の `BLOB` として保持します。
類似度計算は Java 側で cosine similarity を使って行う暫定実装で、保存時と検索時の両方でベクトルを正規化します。`source` / `docId` の絞り込みは SQL 側で先に適用されます。件数が増えると検索性能は低下するため、大規模データには向きません。
登録時は `docId` / `source` / `chunkIndex` を必須 metadata として扱い、欠損している文書はエラーにします。検索時に embedding 次元が一致しない場合もエラーにします。`replaceBySource` は source 単位の delete + insert を 1 トランザクションで実行し、途中失敗時はロールバックされます。
`similarityThresholdAll()` を使っても score が 0 以下の結果は返しません。現在の実装では「関連性がない候補を除外する」挙動を優先しています。SQLite ファイル破損時は破損として、ロック発生時はロックとして明示的に失敗させます。存在しない `docId` / `source` の削除は 0 件または `false` を返します。
## AI ツール
チャット中の AI は、内部的に次のツール群を利用できます。
- ファイル操作、日付取得、外部コマンド実行
- Google Calendar の予定一覧・予定作成
- タスク作成・更新・完了・削除
- 日次ブリーフィング生成
- リマインド作成・一覧
- Web 検索
- MCP サーバー経由のツール
## テスト
```bash
./mvnw test -q
```
## License
このソフトウェアは MIT ライセンスの下で提供されます。
詳細については [LICENSE](./LICENSE) ファイルを参照してください。
## Author
mikoto2000 <mikoto2000@gmail.com>
PUBLIC HISTORY
First discoveredApr 2, 2026
IDENTITY
inferred
Identity inferred from code signals. No PROVENANCE.yml found.
Is this yours? Claim it →METADATA
platformgithub
first seenMar 23, 2026
last updatedApr 1, 2026
last crawled2 days ago
version—
README BADGE
Add to your README:
