Skip to main content
Glama
Wulfgardr

work-assistant

by Wulfgardr

Work Assistant

メールは、人またはインテリジェントエージェントが利用できるローカルアーカイブになります。

プロバイダー非依存 · 複数メールボックス · CLI · MCP · 人によるレビュー

デモを始める · エージェントを接続する · セキュリティを理解する · プロジェクトの状態


図解:メールボックスからローカルアーカイブ、ブローカー、エージェントへ

Work Assistantとは

Work Assistantは、インテリジェントなツールを使ってメールを整理し活用するためのローカルシステムです。

このシステムは、1つまたは複数のメールボックスからメッセージを取得し、それらを正規化してローカルなSQLiteアーカイブに保存します。このアーカイブから、連絡先とやり取りのビューを再構築します。人はコマンドラインからシステムを利用できます。CodexやClaudeのようなエージェントは、MCPプロトコルを通じて利用できます。

Work Assistantは、従来のメールクライアントではなく、単純なスキルでもありません。

  • core は、アカウント、アーカイブ、検証、提案されたコンテンツを管理します。

  • CLI は、モデルなしで人がコアを使用できるようにします。

  • MCPサーバー は、エージェントに構造化されたツールを提供します。

  • skill は、エージェントに、許可された範囲内でこれらのツールを使う方法を教えます。

  • adapter は、特定のメールサービスをコアに接続します。

公開コアはメールを送信しません。準備された返信は、別途承認されたアクションが行われるまで、ローカルの候補のままです。

3つのカード:ローカルメモリ、エージェント用サーフェス、人間による管理

機能

意味

ローカルメモリ

正規化されたメッセージはコンピューター上に残り、完全性のハッシュを保持します。

エージェント用サーフェス

MCP は型付けされたコマンドを公開し、ゲートウェイにアーカイブへの直接アクセスを渡しません。

人間による管理

公開コアはローカルコンテンツを準備しますが、送信コマンドを公開しません。

Related MCP server: mail-index

存在する理由

メールボックスには、単なる個々のメッセージ以上のものが含まれています。会話、人、添付ファイル、決定、そして未完了のタスクが含まれています。一般的なクライアントは現在のメールをよく表示しますが、この履歴を実践的な知識として再利用することは困難です。

Work Assistantは、3つのレベルを分離しています。

  1. ローカルアーカイブ:取得したものを保存し、その整合性を検証します。

  2. ナレッジビュー:アーカイブから連絡先と関係性を再構築します。派生的なもので、再生成できます。

  3. エージェント用サーフェス:モデルが、制御された操作を通じてコンテンツを検索・読み取り・準備できるようにします。

ナレッジビューは元の情報源ではなく、それだけでは検証済みのバックアップにはなりません。真のバックアップには、コピー、保存、検証、復元の確認も必要です。

仕組み

flowchart LR
  Persona[Persona] --> Agente[Agente intelligente]
  Agente -->|strumenti MCP| Gateway[Gateway MCP]
  Gateway -->|IPC locale autenticato| Broker[Broker locale]
  Broker --> Archivio[(Archivio locale)]
  Broker --> Vista[Vista di conoscenza]
  Broker --> Candidati[Candidati di risposta]
  Adapter[Adapter del provider] --> Broker

  classDef paper fill:#f7f2e7,stroke:#294b37,color:#172019;
  classDef sage fill:#dce8d8,stroke:#294b37,color:#172019;
  classDef accent fill:#aa593e,stroke:#aa593e,color:#f7f2e7;
  class Persona,Archivio,Vista,Candidati paper;
  class Gateway,Broker,Adapter sage;
  class Agente accent;

ブローカーは信頼の境界です。平文データを読み、疑似匿名化ルールを適用し、宣言されたスキーマだけをゲートウェイに返します。プロバイダーの識別子は不透明な参照になります。認識できないメタデータは、この境界を超えません。

デモを試す

このデモは、合成のIDとメッセージのみを使用します。認証情報や実際のメールボックスは必要ありません。

前提条件

  • Python 3.11以降;

  • Git;

  • macOS、Linux、Windows。

1. プロジェクトをインストールする

git clone https://github.com/Wulfgardr/work-assistant.git
cd work-assistant
python3 -m venv .venv

macOSまたはLinuxで環境をアクティベートします:

source .venv/bin/activate

Windows PowerShell の場合:

.venv\Scripts\Activate.ps1

Work Assistantをインストールする:

python -m pip install .

2. 設定を作成する

work-assistant --config work-assistant.toml init

このコマンドは、OS固有のデータフォルダを作成します。アーカイブ、キー、IDレジストリは、リポジトリ内には配置されません。

3. 合成メールボックスを読み込む

work-assistant --config work-assistant.toml sync --account personal
work-assistant --config work-assistant.toml sync --account team
work-assistant --config work-assistant.toml list
work-assistant --config work-assistant.toml knowledge
work-assistant --config work-assistant.toml verify

verify コマンドは、SQLiteの整合性とメッセージのハッシュを検証します。バックアップが復元可能であることを示すものではありません。

Work Assistantをエージェントと一緒に使う

Codex、Claude、その他のMCPクライアントは、同じサーフェスを使用します。モデルはCLIに組み込まれていません。

MCPサポートをインストールする:

python -m pip install '.[mcp]'

1. ローカルブローカーを起動する

信頼できるローカルターミナルを開いて、起動します:

work-assistant --config work-assistant.toml broker

ブローカーは起動したままである必要があります。利用できない場合、MCPゲートウェイはアーカイブを直接読み取らずに停止します。

別のターミナルで、必要な2つのパスを取得します:

work-assistant --config work-assistant.toml broker-info

2. Codex にサーバーを登録する

broker-info の値で2つのプレースホルダーを置き換えます:

codex mcp add work-assistant -- \
  "$PWD/.venv/bin/work-assistant" \
  mcp \
  --broker-address '<BROKER_ADDRESS>' \
  --broker-auth-file '<BROKER_AUTH_FILE>'

Windowsでは .venv\Scripts\work-assistant.exe を使用します。

リクエストの例:

Work Assistantを利用します。秘匿モードを確認し、personal メールボックスを同期し、最新のメッセージを表示し、返信候補を準備してください。何も送信しないでください。

任意のスキルは skills/work-assistant にあります。スキルは運用ルールを追加しますが、MCPサーバーには代わりません。

3. Claude Codeにサーバーを登録する

claude mcp add work-assistant -- \
  "$PWD/.venv/bin/work-assistant" \
  mcp \
  --broker-address '<BROKER_ADDRESS>' \
  --broker-auth-file '<BROKER_AUTH_FILE>'

Claude Desktopの場合は、同等の stdio サーバーを設定します:

{
  "mcpServers": {
    "work-assistant": {
      "command": "/percorso/assoluto/work-assistant/.venv/bin/work-assistant",
      "args": [
        "mcp",
        "--broker-address",
        "<BROKER_ADDRESS>",
        "--broker-auth-file",
        "<BROKER_AUTH_FILE>"
      ]
    }
  }
}

エージェントなしでCLIを使う

CLIは決定的です。モデルを含まず、自然なリクエストを解釈しません。

work-assistant --config work-assistant.toml list --account personal --limit 10
work-assistant --config work-assistant.toml show --account personal --id p-001

ローカルの返信候補を保存するには:

printf 'Grazie. Verifico il documento entro venerdì.\n' > risposta.txt
work-assistant --config work-assistant.toml draft-candidate \
  --account personal \
  --to sam@example.test \
  --subject 'Re: Revisione del progetto' \
  --in-reply-to p-001 \
  --body-file risposta.txt

応答には sent: false が含まれます。プロバイダーには何も書き込まれません。

ターミナルにアクセスできるエージェントはMCPを使用する必要があります。SQLiteを直接読んだり、CLIの平文出力を直接読んではいけません。

複数のメールボックスを設定する

[accounts] セクションの各テーブルが、独立したメールボックスを表します:

schema_version = 1
data_dir = "/percorso/esterno/al/repository"

[privacy]
mode = "all"
default_action = "pseudonymize"

[accounts.personal]
provider = "demo"
source = "./examples/demo-mailbox.jsonl"
address = "alex@example.test"

[accounts.team]
provider = "demo"
source = "./examples/team-mailbox.jsonl"
address = "team@example.test"

リポジトリには、デモ用のアダプターのみが含まれています。実際のアダプターは、docs/PROVIDER_ADAPTERS.md に記述された契約を実装する必要があります。

Zimbra と Carbonio

公開バージョンには、HARファイルからZimbraまたはCarbonioのセッションを準備するためのローカルオンボーディングが含まれています。実際に動作するZimbraアダプターは含まれていません。

sequenceDiagram
  participant A as Agente
  participant P as Persona
  participant B as Browser
  participant C as CLI locale
  A->>P: Spiega i passaggi e controlla lo stato
  P->>B: Esegue login e autenticazione a due fattori
  P->>C: Importa localmente il file HAR
  C-->>P: Conferma solo nomi dei cookie e stato
  Note over A,C: Password, OTP, HAR e valori dei cookie non entrano nel modello

ローカルコマンドは次のとおりです:

work-assistant --config work-assistant.toml import-zimbra-har \
  --account work \
  --har /percorso/locale/session.har

このコマンドはHARファイルを削除しません。検証後は、その機密性の高い内容に適した手順でエクスポートを移動または削除してください。

データの保護方法

Work Assistantには、次の3つのモデルが用意されています:

モード

動作

off

変換はありません。 エージェントに見えるコンテンツはモデルプロバイダーに届く可能性があります。

all

構造化された識別子と認識されたテキストを疑似匿名化します。これは設定例の値です。

selective

送信者ごとに順序付けされたルールを適用します。最初に一致したルールが優先されます。

選択的ルールの例:

[privacy]
mode = "selective"
default_action = "pseudonymize"

[[privacy.sender_rules]]
pattern = "newsletter@example.test"
action = "allow_raw"

[[privacy.sender_rules]]
pattern = "*@sensitive.example"
action = "pseudonymize"

エージェントの応答には、ルールのリテラル値ではなく、不透明なIDのみが含まれます。

任意のIDレジストリは、デフォルトで <data_dir>/privacy/entities.json にあります。POSIXシステムでは、ユーザーが所有し、パーミッション 0600 である必要があります。

疑似匿名化は可逆であり、匿名性を保証するものではありません。まれな事実、文脈、文体、認識できない用語が、人物を特定する可能性があります。

ブローカーが本当の境界となるためには、データフォルダはエージェントが読み取れるワークスペースの外でなければなりません。ブローカーは、管理されたデモのみを対象とした明示的かつ安全でないオーバーライドがない限り、この設定を拒否します。

実際のメッセージを使用する前に SECURITY.md をお読みください。

Daybreak セキュリティレビュー

2026年8月24日、Daybreakレビューは、ブローカー、疑似匿名化、IPC、MCPサーフェスを分析しました。このレビューでは、中程度の重要度が1件、低重要度が6件の、計7件の問題が発見されました。

バージョン 0.3.0 では、次の修正が適用されています。

  • データとキーをデフォルトでリポジトリの外に配置;

  • 保護されたストアがエージェントのワークスペースにある場合、ブローカーが拒否;

  • 外部IDレジストリとパーミッションの確認;

  • クローズドリストのMCPスキーマ、不透明な参照、プロバイダーのメタデータを除外;

  • 選択的ルール用の不透明な識別子;

  • 固定ワーカー数とアイドル接続のタイムアウト;

  • 接続、認証、リクエスト、レスポンス全体のタイムアウト。

報告書、証拠、残された制限は、docs/security/DAYBREAK-REVIEW.md にあります。

バックアップと復元

Work Assistantは、正規化されたメッセージとそのハッシュを保持します。これにより、アーカイブを検証可能になりますが、自動的に堅牢なバックアップになるわけではありません。

検証済みバックアップを宣言するには、以下を定義し実証する必要があります。

  • 含めるメッセージと添付ファイル;

  • 暗号化と鍵の管理;

  • 頻度、保持、バージョン管理;

  • ハッシュの検証;

  • 隔離された環境での復元手順;

  • 期待されるコンテンツと復元されたコンテンツの比較。

verify 関数は、現在のアーカイブを検査します。復元を実行しません。

プロジェクトの状態

Work Assistantは アルファ プロジェクトです。

利用可能:

  • プロバイダーに依存しないコア;

  • 複数メールボックスの設定;

  • 合成デモアダプター;

  • ハッシュ付きSQLiteアーカイブ;

  • 連絡先とやり取りのローカルビュー;

  • CLI;

  • MCPゲートウェイとローカルブローカー;

  • 可逆的な疑似匿名化;

  • エージェント用スキル;

  • ZimbraとCarbonioの準備オンボーディング。

利用不可:

  • 実際のプロバイダー向けの本番アダプター;

  • メールの送信;

  • バックアップと復元の完全な証明;

  • 添付ファイルのバイナリコンテンツの疑似匿名化;

  • 匿名性の保証。

開発とコントリビューション

python -m pip install '.[dev,mcp]'
pytest
python scripts/privacy_check.py
work-assistant benchmark-privacy --iterations 50

コード、テスト、スクリーンショット、issue、プルリクエストでは、合成データのみを使用してください。プロジェクトのルールは CONTRIBUTING.md を読んでください。

ライセンス

Work Assistant は MIT ライセンスの下で配布されています。

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    A
    maintenance
    Enables AI agents to query and recall your entire Gmail inbox locally, providing fast summarization and semantic search without relying on Gmail's search API.
    68 npm
    4
    MIT
  • A
    license
    A
    quality
    B
    maintenance
    Reads and searches local email archives (.mbox or .eml) with full MIME parsing, enabling queries about senders, subjects, dates, and bodies while keeping all data on your machine.
    3
    188 npm
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables AI assistants to search a local email archive using hybrid keyword and semantic search, and retrieve individual emails with thread context.
    1
    MIT