Fragments of verbose memory

冗長な記憶の断片 - Web技術のメモをほぼ毎日更新

Feb 27, 2026 - 日記

OpenFangのHands: チャットを待たずに働くエージェントの設計

OpenFangのHands: チャットを待たずに働くエージェントの設計 cover image

先日、OpenFang というオープンソースのAgent Operating Systemを見つけました。「Agent OS」という言葉自体は目新しくないのですが、OpenFangの設計には「Hands(ハンズ)」という独特のコンセプトがあります。

従来のAIエージェントは「ユーザーがメッセージを送るまで待機する」のが基本ですが、Handsは「スケジュールで自律的に動作し、結果をダッシュボードに報告する」という設計です。この違いは小さく見えて、実は運用上の大きな転換点だと思います。

本記事では、OpenFangのHandsという設計思想を、既存のエージェントフレームワーク(OpenClaw 、CrewAI、LangGraph等)との比較を交えながら解説します。

OpenFangとは

OpenFang は、RightNow-AI が開発したRust 製のオープンソースAgent Operating Systemです。2026年2月時点でGitHubに公開されており、MIT/Apache-2.0のデュアルライセンスで提供されています。

主な特徴:

  • 言語: Rust(137K行、14 crates)
  • セキュリティ: 16層のセキュリティシステム(WASM sandbox、Ed25519署名、Merkle監査証跡等)
  • プロトコル: MCP (Model Context Protocol)、A2A(Agent-to-Agent)、OFP(OpenFang Protocol)対応
  • チャネル: 40種類のメッセージングプラットフォーム統合(Telegram、Discord、Slack、WhatsApp等)
  • LLMプロバイダー: 27プロバイダー、50以上のモデルに対応

OpenFangの最大の特徴は、7つの自律型エージェントパッケージ「Hands」を標準搭載している点です。

Handsとは何か

Handsは、OpenFangが提供する「自律型エージェントパッケージ」です。従来のエージェントとの違いを表にまとめます。

項目従来のエージェントHands
起動方法ユーザーがメッセージを送信スケジュールで自動起動
動作モード対話型(チャット)自律型(バックグラウンド処理)
結果の通知チャット画面に返信ダッシュボードに報告
用途質問応答、タスク実行定期監視、データ収集、コンテンツ生成

Handsの設計思想

OpenFangの公式サイトには、以下のように書かれています。

Traditional agents wait for you to type. Hands work for you.

この一文が、Handsの本質を表しています。従来のエージェントは「待機型」ですが、Handsは「自律型」です。

7つのHands

OpenFangには、以下の7つのHandsが標準搭載されています。

1. Clip(動画編集)

長尺動画を短尺クリップに変換し、字幕・サムネイルを自動生成します。TelegramやWhatsAppに自動投稿する機能も含まれます。

技術スタック: FFmpeg、yt-dlp、5種類のSTTバックエンド

ユースケース: YouTubeの長尺動画をTikTok/Instagram Reels向けに自動変換

2. Lead(リード生成)

ICP(Ideal Customer Profile)に基づいて、リードを自動収集・スコアリング・重複排除します。

技術スタック: Web research loops、CSV/JSON/Markdown export

ユースケース: 毎日のリード生成を自動化し、営業チームに配信

3. Collector(OSINT)

指定したターゲットを継続的に監視し、変更検知・感情分析・知識グラフ構築を行います。

技術スタック: Change detection、Sentiment analysis、Knowledge graphs

ユースケース: 競合他社のWebサイト更新を自動追跡

4. Predictor(予測)

シグナルを収集し、Brier scoreで精度を追跡しながら予測を行います。

技術スタック: Brier score calibration、Evidence chains

ユースケース: 市場動向の予測と精度評価

5. Researcher(リサーチ)

CRAAP評価(Currency, Relevance, Authority, Accuracy, Purpose)でソースを検証し、引用付きレポートを生成します。

技術スタック: CRAAP fact-checking、Multi-language、APA citations

ユースケース: 技術調査レポートの自動生成

6. Twitter(X管理)

7種類のコンテンツフォーマットでツイートを生成し、承認キュー経由で投稿します。

技術スタック: Approval queue、7 content types、Engagement tracking

ユースケース: ブランドアカウントの自動運用

7. Browser(Web自動化)

Playwrightを使ってWebサイトを自動操作します。購入操作には承認ゲートが必須です。

技術スタック: Playwright bridge、Session persistence、CAPTCHA detection

ユースケース: 定期的なフォーム送信、データスクレイピング

Handsの実装構造

Handsは、以下の要素で構成されています。

HAND.toml(マニフェスト)

Handの設定を定義するTOMLファイルです。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
[hand]
id = "researcher"
name = "Researcher"
description = "Deep autonomous researcher with CRAAP evaluation"
version = "1.0.0"

[hand.requires]
tools = ["web_search", "knowledge_graph", "citation_generator"]

[hand.agent]
model = "anthropic/claude-sonnet-4-5"

[hand.schedule]
cron = "0 9 * * *"  # 毎日9時に実行

[hand.settings]
output_format = { type = "string", default = "markdown" }
citation_style = { type = "string", default = "APA" }
languages = { type = "string[]", default = ["en", "ja"] }

SKILL.md(専門知識)

Handが参照する専門知識を記述したMarkdownファイルです。

1
2
3
4
5
6
7
8
9
# Researcher Skill

## CRAAP Evaluation Framework

- **Currency**: 情報の新しさ
- **Relevance**: トピックとの関連性
- **Authority**: 情報源の信頼性
- **Accuracy**: 事実の正確性
- **Purpose**: 情報の目的

System Prompt(動作指示)

Handの動作を制御するシステムプロンプトです。複数フェーズの動作を定義できます。

Phase 1: Topic Analysis
- Extract key concepts
- Identify research questions

Phase 2: Source Collection
- Search for primary sources
- Evaluate with CRAAP framework

Phase 3: Report Generation
- Synthesize findings
- Generate citations

Dashboard Metrics(メトリクス)

Handの実行結果をダッシュボードに表示するためのメトリクスです。

1
2
3
4
5
6
{
  "sources_evaluated": 15,
  "craap_score_avg": 4.2,
  "citations_generated": 23,
  "execution_time_ms": 12500
}

Handsの起動と管理

Handsは、CLIまたはHTTP APIで管理します。

CLIでの操作

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
# Handを有効化(自律動作開始)
openfang hand activate researcher

# Handのステータス確認
openfang hand status researcher

# Handの一時停止
openfang hand pause researcher

# Handの再開
openfang hand resume researcher

# Handの無効化
openfang hand deactivate researcher

HTTP APIでの操作

1
2
3
4
5
# Handを有効化
curl -X POST http://localhost:8080/api/hands/researcher/activate

# ステータス確認
curl http://localhost:8080/api/hands/researcher/status

レスポンス例:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
{
  "hand": "researcher",
  "status": "active",
  "last_run": "2026-02-27T09:00:00Z",
  "next_run": "2026-02-28T09:00:00Z",
  "metrics": {
    "sources_evaluated": 15,
    "craap_score_avg": 4.2
  }
}

既存フレームワークとの比較

OpenFangのHandsを、既存のエージェントフレームワークと比較します。

OpenClawとの違い

OpenClaw は、TypeScriptで書かれた常時稼働型AIアシスタントです(詳細は「OpenClawハートビート: 通知をスパムにしない常時稼働エージェント設計 」参照)。

項目OpenClawOpenFang
言語TypeScriptRust
自律動作Heartbeat(定期チェック)Hands(スケジュール実行)
通知方式チャットチャネルに通知ダッシュボードに報告
用途パーソナルアシスタント自律型ワーカー

OpenClawのHeartbeatは「定期的にチェックして、必要なときだけ通知する」設計ですが、OpenFangのHandsは「定期的に実行して、結果を蓄積する」設計です。

CrewAI/LangGraphとの違い

CrewAIやLangGraphは、Pythonで書かれたマルチエージェントフレームワークです。

項目CrewAI/LangGraphOpenFang
エージェント起動コード実行時スケジュール
状態管理セッション内メモリ永続化(SQLite + vector)
チャネル統合なし40種類
セキュリティ基本的な検証16層のセキュリティ

CrewAI/LangGraphは「ユーザーがコードを実行したときに動く」設計ですが、OpenFangは「常時稼働してスケジュールで動く」設計です。

Handsの実装例: カスタムHandの作成

OpenFangでは、独自のHandを作成できます。以下は、GitHubのissueを監視するHandの例です。

HAND.toml

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
[hand]
id = "github_monitor"
name = "GitHub Monitor"
description = "Monitor GitHub issues and notify on critical bugs"
version = "1.0.0"

[hand.requires]
tools = ["github_api", "slack_notify"]

[hand.agent]
model = "anthropic/claude-haiku-4-5"

[hand.schedule]
cron = "*/30 * * * *"  # 30分ごとに実行

[hand.settings]
repository = { type = "string", default = "owner/repo" }
labels = { type = "string[]", default = ["bug", "critical"] }
notify_channel = { type = "string", default = "#engineering" }

SKILL.md

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
# GitHub Monitor Skill

## Issue Evaluation Criteria

- **Severity**: エラーの影響範囲
- **Reproducibility**: 再現性の有無
- **User Impact**: ユーザーへの影響度

## Notification Rules

- Critical bug: 即座に通知
- High priority: 1時間以内に通知
- Medium priority: 日次サマリーに含める

System Prompt

Phase 1: Fetch Issues
- Get issues with labels "bug" and "critical"
- Filter by creation/update time since last run

Phase 2: Evaluate Severity
- Analyze issue description
- Check for reproduction steps
- Estimate user impact

Phase 3: Notify
- If critical: send Slack notification immediately
- If high: add to hourly digest
- If medium: add to daily summary

実行結果

Handが実行されると、以下のようなメトリクスがダッシュボードに表示されます。

1
2
3
4
5
6
{
  "issues_checked": 42,
  "critical_found": 2,
  "notifications_sent": 2,
  "execution_time_ms": 3200
}

Handsの設計が解決する問題

Handsの設計は、以下の問題を解決します。

1. 通知疲れ(Notification Fatigue)

従来のエージェントは、結果をチャットに送信します。定期実行すると、チャットが通知で埋まります。

Handsは、結果をダッシュボードに蓄積し、ユーザーが必要なときに確認できます。

2. 状態の永続化

従来のエージェントは、セッション内メモリを使います。再起動すると状態が失われます。

Handsは、SQLite + vector embeddingsで状態を永続化します。

3. スケジュール管理の複雑さ

従来のエージェントは、外部のcronやGitHub Actionsでスケジュール管理します。

Handsは、HAND.tomlでスケジュールを定義し、OpenFangが管理します。

4. セキュリティリスク

従来のエージェントは、ツール実行時のサンドボックスが弱いです。

Handsは、WASM dual-metered sandboxでツールを実行し、fuel + epoch interruptionで暴走を防ぎます。

Handsの制約と注意点

Handsには、以下の制約があります。

1. Rust環境が必要

OpenFangはRustで書かれているため、ビルドにはRust環境が必要です。

1
2
3
4
5
6
7
# Rustのインストール
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh

# OpenFangのビルド
git clone https://github.com/RightNow-AI/openfang.git
cd openfang
cargo build --release

2. リソース消費

Handsは常時稼働するため、メモリとCPUを消費します。公式ベンチマークでは、アイドル時のメモリ使用量は40MBですが、複数のHandsを同時実行すると増加します。

3. LLMコスト

Handsは定期的にLLMを呼び出すため、コストが発生します。HAND.tomlでmodelを指定し、安価なモデル(例: anthropic/claude-haiku-4-5)を使うことを推奨します。

4. デバッグの難しさ

Handsはバックグラウンドで動作するため、エラーが発生してもすぐに気づきません。ログとダッシュボードを定期的に確認する必要があります。

まとめ

OpenFangのHandsは、「チャットを待たずに働くエージェント」という新しい設計思想を提示しています。

従来のエージェントは「対話型」ですが、Handsは「自律型」です。この違いは、以下の場面で効果を発揮します。

  • 定期監視: 競合サイトの更新、GitHubのissue、市場動向
  • データ収集: リード生成、OSINT、予測
  • コンテンツ生成: 動画クリップ、ツイート、レポート

OpenFangはまだ開発初期段階(2026年2月時点でv0.1.0)ですが、Rust製の堅牢な設計と、16層のセキュリティシステムは注目に値します。

興味のある方は、公式サイトGitHubリポジトリ をチェックしてみてください。

参考リンク