Skip to main content
Glama

FocusRoom | プロダクティビティエージェント

Python、Streamlit、Groq、SQLite、MCPで構築された個人用プロダクティビティワークスペース。タスク管理、日次計画、永続メモリ、マルチエージェントスーパーバイザー、オプションのメールリマインダーを1つのプロジェクトに統合しています。

機能

  • Streamlitプロダクティビティダッシュボード

  • タスクの作成、一覧表示、フィルタリング、完了

  • タスクの優先度、期限、プロジェクト、ステータス

  • productivity.db への永続的なSQLiteストレージ

  • 日次計画とプロダクティビティレポート

  • メモリの保存と検索

  • Groqベースのプロダクティビティアシスタント

  • タスク、メモリ、計画リクエスト用のマルチエージェントスーパーバイザー

  • HTTPツール用のMCPサーバー(外部からの利用に対応)

  • オプションの自動メールリマインダー

Related MCP server: Task API MCP

必要条件

  • Python 3.10以降

  • AI機能用のGroq APIキー

  • メールリマインダー用のGmail SMTP認証情報または他のSMTPプロバイダー

セットアップ

1. 仮想環境を作成する

PowerShell:

python -m venv .venv
.\.venv\Scripts\Activate.ps1

PowerShellが現在のセッションでスクリプトの実行をブロックする場合:

Set-ExecutionPolicy -Scope Process -ExecutionPolicy RemoteSigned
.\.venv\Scripts\Activate.ps1

2. 依存関係をインストールする

python -m pip install -r requirements.txt

3. 環境変数を設定する

.env.example を .env にコピーし、値を入力してください:

Copy-Item .env.example .env

Groqベースのエージェントに必要:

GROQ_API_KEY=your_groq_api_key
GROQ_MODEL=openai/gpt-oss-120b

オプションのMCP設定:

MCP_HOST=127.0.0.1
MCP_PORT=8000
MCP_API_KEY=local_or_remote_api_key

メールリマインダー用:

EMAIL_SENDER=your_email@gmail.com
EMAIL_RECIPIENT=recipient@example.com
EMAIL_PASSWORD=your_smtp_or_app_password
SMTP_SERVER=smtp.gmail.com
SMTP_PORT=587

.env やAPI認証情報をコミットしないでください。これらは .gitignore によって除外されています。

Streamlitアプリを実行する

streamlit run streamlit_app.py

アプリには以下のセクションがあります:

  • 概要 - タスクメトリクス、進行中の作業、日次スナップショット、完了進捗

  • タスク - タスクの作成とフィルタリング、タスクの完了

  • 計画 - 現在の日次計画とプロダクティビティレポートの表示

  • メモリ - 永続コンテキストの保存と検索

  • アシスタント - プロダクティビティスーパーバイザーへの自然言語リクエストの送信

MCPサーバーを実行する

Streamable HTTP MCPサーバーを以下のコマンドで起動します:

python -m orchestrator.mcp_server

デフォルトでは http://127.0.0.1:8000/mcp で実行されます。

サーバーは以下のツールを公開しています:

  • productivity_assistant

  • create_task

  • list_tasks

  • update_task

  • complete_task

  • delete_task

  • save_memory

  • search_memory

  • daily_plan

  • productivity_report

MCPサーバーをローカル以外のホストにバインドする場合は、MCP_API_KEY を設定してください。リモートリクエストはベアラートークンを使用する必要があります:

Authorization: Bearer <MCP_API_KEY>

リマインダーを実行する

リマインダーワーカーは予定されたタスクを確認し、設定されたメール通知を送信します:

python reminder_worker.py

リマインダーのスケジュールはワーカー内で設定され、タスクの期限の24時間前、1時間前、15分前のリマインダーをサポートしています。メールリマインダーには .env 内の有効なSMTP設定が必要です。

テストを実行する

pytestを使用できるように、プロジェクトの仮想環境を使用してください:

.\.venv\Scripts\python -m pytest -q

特定のテストファイルを実行するには:

.\.venv\Scripts\python -m pytest -q test_multi_agent.py

アプリを起動せずにPython構文を確認するには:

.\.venv\Scripts\python -m compileall streamlit_app.py orchestrator

プロジェクト構造

Productivity_Agent/
|-- streamlit_app.py              # Streamlit user interface
|-- requirements.txt              # Python dependencies
|-- .env.example                  # Environment variable template
|-- productivity.db               # Local SQLite database, generated locally
|-- reminder_service.py           # Reminder service implementation
|-- reminder_worker.py            # Continuous reminder worker
|-- orchestrator/
|   |-- agent.py                  # Core task, memory, plan, and report logic
|   |-- database.py               # SQLite persistence layer
|   |-- orchestrator.py           # Multi-agent supervisor
|   |-- mcp_server.py             # MCP HTTP server and tools
|   |-- memory_agent.py           # Memory agent adapter
|   |-- planning_agent.py         # Planning agent adapter
|   |-- task_agent.py             # Task agent adapter
|-- test_*.py                     # Project tests

データとセキュリティに関する注意事項

  • タスクとメモリはSQLiteにローカルに保存されます。

  • .env には機密情報が含まれるため、非公開に保つ必要があります。

  • Gmailの場合は、必要に応じてプライマリアカウントのパスワードの代わりにアプリパスワードを使用してください。

  • MCP APIキーは、サーバーがlocalhost以外に公開される場合に必要です。

  • ローカルのタスクとメモリの履歴が重要な場合は、productivity.db をバックアップしてください。

トラブルシューティング

pytest が認識されない

仮想環境を通じてpytestを実行してください:

.\.venv\Scripts\python -m pytest -q

アプリは起動するがアシスタントが利用できない

.env が存在し、有効な GROQ_API_KEY が含まれていることを確認し、Streamlitを再起動してください。

Streamlitが missing ScriptRunContext を報告する

この警告は、python -c でStreamlitモジュールを直接インポートした場合に表示されます。通常の操作では streamlit run streamlit_app.py でアプリケーションを起動してください。

コンパイルは成功するが、コレクション中にテストが失敗する

コレクションエラーは、pytestがテストのインポートを完了できなかったことを意味します。最初に報告された例外を読み、残りのテストを評価する前に、その依存関係またはコンストラクタの不一致を修正してください。

Maintenance

ActivitySlowing
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers