**FUSEはすべての必要を満たす―ファイルシステムを通じてエージェントがあらゆるものへアクセスできる**

FUSE(Filesystem in Userspace)は、エージェントがまるでローカルファイルシステムに接続しているかのように、任意のデータソースとシームレスにやり取りできるようにします。これにより、多様なリソースへ統一されたインターフェースでアクセスすることが可能になります。

2026/01/12 6:12

**FUSEはすべての必要を満たす―ファイルシステムを通じてエージェントがあらゆるものへアクセスできる** FUSE(Filesystem in Userspace)は、エージェントがまるでローカルファイルシステムに接続しているかのように、任意のデータソースとシームレスにやり取りできるようにします。これにより、多様なリソースへ統一されたインターフェースでアクセスすることが可能になります。

RSS: https://news.ycombinator.com/rss

要約

Japanese Translation:

この記事は、Filesystem in Userspace(FUSE)が任意のデータ構造―例えばメールフォルダーやクラウドストレージ―を実際のファイルシステムとして公開できることを主張し、エージェントが親しみやすいシェルコマンドで非ファイルシステム領域と対話できるようにする点を論じています。

主な動機は次の通りです。
• 最近のエージェント駆動型ツール(Turso の AgentFS、Anthropic の Agent SDK、Vercel の text‑to‑SQL エージェント)は、ファイルシステムへのアクセスが可能なサンドボックス化されたシェルを使用して操作性を向上させています。これにより、ツールスペースの削減、直感的なオペレーションチェーンの実現、中間結果用の計画/スクラッチファイルの提供、および長いコンテキストをファイル圧縮で処理することが可能になります。
• 非ファイルシステム領域をサンドボックス化されたファイルシステムにマッピングする際には、データコピー・同期、情報の漸進的公開、およびビューの最新状態維持といった課題があります。

提案されている解決策は、TypeScript と `fuse-native` を用いて FUSE の主要操作(`readdir`、`getattr`、`read`、`open`、`mkdir`、`rename`)を実装します。メールフォルダー/メッセージをディレクトリ/ファイルとしてマッピングし、仮想フォルダー(例:*Starred*、*Needs_Action*)をシンボリックリンクで作成します。また、フラグ切替はデータベースを直接更新せずに、シェルコマンド(`ln -s`、`unlink`、`readlink`)で行います。

エージェントは Anthropic の Agent SDK を使用して構築され、Bash ツール(`ls`、`cat`、`find`、`mv`、`ln`、`rm`)を備え、モデルにファイルシステムのセマンティクスを説明するシステムプロンプトが付与されています。実演では、エージェントが受信箱メールを一覧表示し、キーワード検索、スター付け、フォルダー移動、新規フォルダー作成、およびアクションの要約をすべてシェルコマンドで行う様子が示されています。

この手法は全データセットを事前にロードすることなく、バックエンドからオンデマンドでファイルを読み込むため、一貫性と効率的なリソース利用を保証します。完全な実装は GitHub(https://github.com/Jakob-em/agent-fuse)で入手可能です。将来的には、この FUSE ベースの方法を従来のエージェントループとベンチマークし、サンドボックスプロバイダーが開発者に FUSE やサンドボックス詳細を管理させることなく、高レベル API(例:`/emails`、`/old_conversations`)でカスタムファイルシステムビューを公開する可能性について検討します。

本文

エージェントにサンドボックス化されたシェルとファイルシステムへのアクセス権を与えることは、エージェンシャル・ハーネスの最新トレンドです。
近年の代表例として次のようなものがあります。

  • Turso の AgentFS
  • Anthropic の Agent SDK(Claude Code のハーネスを非コーディング領域へ拡張)
  • Vercel がテキスト→SQL エージェントをサンドボックス上に再構築
  • Anthropic のファイルシステムベースの段階的公開機能(Agent Skills)

これが良いとされる理由は次のようにまとめられます。

  1. 大手研究室では、コーディングタスク向けに重度の強化学習を行っており、その環境と親和性を高めることでコーディング領域で得られる恩恵を他の問題領域にも波及させられます。

  2. 検索・書き込み・移動・リスト化ツールを Bash 1 本に統合することで、ツール空間が大幅に縮小します。エージェントは直感的に操作をチェーンでき、Unix のパラダイムが自動で優れたツール設計を提供してくれます。

  3. ファイルシステムを持つことで、自動的に生まれる便利なパターンがあります。例えば:

    • Plan/Scratch ファイル – エージェントは一時ファイルを作成し、思考の整理・進捗管理・中間結果の保存に利用します。
    • 長期コンテキスト処理 – 会話が膨らむと古いメッセージやツール結果をファイルへ圧縮しておき、必要な時に再読み込みすることで全てをメモリ上に保持する手間を省けます。

このようにメリットは明確です。しかし実際に自分のドメインでどう活用するかが難題になります。


2 つのケーススタディ

ドメイン
ファイルシステムと類似点を持つ領域メール整理エージェント(フォルダ管理、閲覧、移動)
既存プラットフォームでファイルシステムに見えるものGoogle Drive 内のエージェント

サンドボックス化されたファイルシステムに組み込む際には次のような疑問が浮かびます。

  • いつファイルをコピーする?
  • 全てをコピーするべきか?
  • エージェントが行った更新を書き戻す方法は?
  • 人間による編集を同期させるタイミングは?
  • エージェントの進捗に合わせてフォルダ/ファイルを段階的に表示するには?

Vercel が X で発表した「ファイルシステムベースエージェント」についてのコメントでは、「この記事はその質問に対して十分な回答を提供していない」と述べられています。ファイルシステムの構造は示されているものの、PostgreSQL+オブジェクトストレージ+API を実際にサンドボックス FS に投影する具体的かつスケーラブルな手法が提示されていません。「プリロードファイル」という表現だけでは、推奨される取り込み/スナップショットパターンが不明です。


FUSE で「何でもファイルシステム化」する

例:メールエージェント

AI 主導のメールプラットフォーム(Gmail のように、上層に AI を付加)を構築するとします。データは自前の DB に格納されており、ユーザーは UI を通じて操作します。強力なエージェントを追加したい場合、単純なツールループ(

list-emails
,
move-email
,
read-email
)ではなく、データをファイルシステムとして露出させます。

エージェントサンドボックス内のディレクトリ構成

workspace/
  Inbox/
    Customer Inquiry - Size Chart (emily.wolfe@gmail.com)
    PO Confirmation #2026-0038 (supplierC@fabricdirect.com)
    Shipping Delay Notice (supplierA@logisticsco.com)
    Partnership Proposal - TrendCircle (marketing@trendcircle.io)

  Starred/
    Wholesale Inquiry - SilverLeaf Boutique (boutique@silverleaf.co)
    Re: Restock ETA For Red Jackets (supplierA@logisticsco.com)

  Needs_Action/
    Missing Documents - Customs (carrier-support@airbridge.co)
    Last Call: VAT Filing Deadline (gov-tax@tradeportal.gov)

  Orders/
    2026/
      Feb/
        PO Confirmation #2026-0038 (supplierC@fabricdirect.com)
        Shipping Delay Notice (supplierA@logisticsco.com)

  Customers/
    Returns/
      Return Request #8743 (john.hartley@yahoo.com)

  Sent/
    Re: Customer Inquiry - Size Chart (emily.wolfe@gmail.com)

FUSE が高レベルアーキテクチャにどう組み込まれるか

  • 従来のパス – UI → バックエンド → DB。
  • エージェントパス – エージェントはサンドボックス内でマウントされたファイルシステムを見ます。
    ls /workspace/Inbox
    を実行すると FUSE 層が呼び出され、同じバックエンドに対するクエリへと変換されます。ユーザーもエージェントも「別々のインタフェース」を通して同一データを参照します。

ファイルシステムはエージェント用 UI 層として機能します。閲覧・読取・整理操作には優れた抽象化が提供されますが、メール送信などの実際のアクションは別ツールに委ねられます。


ファイルシステム操作の実装

以下は

fuse-native
を用いた TypeScript の簡易実装例です。主要な操作のみを示します。

// readdir – ディレクトリ内容一覧取得
export async function readdir(
  path: string,
  cb: (err: number, names?: string[]) => void
) {
  const [folder] = await db.select().from(foldersTable).where(eq(foldersTable.path, path));

  if (!folder) return cb(Fuse.ENOENT);

  const emailsInFolder = await db
    .select({ email: emailsTable, sender: contactsTable })
    .from(emailsTable)
    .leftJoin(contactsTable, eq(emailsTable.sender, contactsTable.id))
    .where(eq(emailsTable.folderId, folder.id));

  const entries = new Set<string>();
  for (const { email, sender } of emailsInFolder) {
    entries.add(`${email.subject} (${sender.email}).eml`);
  }

  const subfolders = await db.select().from(foldersTable).where(like(foldersTable.path, sql`${path}/%`));
  for (const subfolder of subfolders) {
    entries.add(subfolder.path.split("/").pop() || "");
  }

  cb(0, Array.from(entries));
}

// read – メール本文取得
export async function read(
  path: string,
  fd: number,
  buf: Buffer,
  len: number,
  pos: number,
  cb: (err: number) => void
) {
  const email = await getEmailById(fd);
  if (!email) return cb(Fuse.ENOENT);

  const content = emailToContent(email);
  const slice = content.slice(pos, pos + len);
  const bytesRead = buf.write(slice);
  cb(bytesRead);
}

export function emailToContent(email: EmailWithSender): string {
  return `From: ${email.senderEmail}
Date: ${email.sentAt.toISOString()}
Subject: ${email.subject}
X-Folder: ${email.folderPath}
X-Starred: ${email.starred}
X-Needs-Action: ${email.needsAction}

${email.body}`;
}

open
,
mkdir
,
rename
,
symlink
,
unlink
などの追加操作により、メール移動・フォルダ作成・仮想フォルダ(Starred, Needs_Action)の扱いが可能になります。これらの仮想フォルダではエージェントは「シンボリックリンク」を通じて実際のファイルを参照し、リンク操作でデータベース上のフラグを切り替えます。


マウントと利用方法

FUSE 実装は Docker コンテナ内にマウントされます。エージェントが直接 DB から読み取るため、同期崩壊のリスクはなく、必要なデータだけがオンデマンドでロードされます。

Anthropic Agent SDK エージェントとのサンプル対話

You are an email assistant helping the user manage their inbox.
...

エージェントは Bash コマンド(

ls
,
cat
,
find
,
mv
,
ln -s
,
rm
,
mkdir
)を使って
/workspace
を操作します。内部で行ったアクションは自然言語に翻訳され、ユーザーへ提示されます。例:

  • 「Starred」 → 実際にはシンボリックリンク作成
  • 「Orders へ移動」 →
    mv /Inbox/... /Orders/
    の実行

デモでは以下の典型タスクを実演します。

  1. Inbox のメール一覧表示
  2. 件名または送信者で特定メール検索
  3. Starred フォルダへの追加(シンボリックリンク作成)
  4. Inbox を
    Customers
    ,
    Orders
    ,
    Business_Opportunities
    へ整理し、緊急アイテムをフラグ付け

すべては明示的なツール API を設計せずに、ドメインをファイルシステムへマッピングするだけで実現しています。


要点と今後の可能性

  • 仮想ファイルシステム はコンテキストエンジニアリング(古い会話・ツール結果・構造化データ)のために活用できる。
  • エージェントは Unix の慣習を利用することで、開発者の認知負荷を低減し、操作性が向上します。
  • 将来的なサンドボックスプロバイダーは、アプリケーション内のどこを仮想ファイルシステムとして公開するかを宣言できる API を提供する可能性があります。例:
new Agent({
  tool: [...],
  sandbox: {
    filesystem: {
      '/emails': (folder) => listEmails(folder),
      '/old_conversations': () => listOldConversations(),
    }
  }
});

FUSE やサンドボックスの詳細を扱う必要がなく、マッピングだけを定義すれば残りはシステムに任せられます。これはスケーラブルで保守性の高い AI エージェント構築における大きな差別化要因となり得ます。

同じ日のほかのニュース

一覧に戻る →

2026/01/12 5:47

**macOS Tahoe におけるウィンドウサイズ変更の苦労** macOS Tahoe では、アプリケーションウィンドウをリサイズすることが思ったより難しい場合があります。ユーザーは次のような点に悩むことが多いです: - 標準のドラッグ&ドロップ方式が安定しない。 - リサイズ用キーボードショートカットが十分に文書化されていない。 - 特定のアプリではウィンドウサイズ制限を無視してしまう。 これらの問題は、デスクトップ上で効率的に作業することを困難にします。

## Japanese Translation: --- ## 要約 macOS Tahoe の極端に大きなウィンドウの角丸半径は、通常のリサイズ動作を妨げます。丸みが付いた角は、必要な 19×19 ピクセルのクリックターゲットの約 75% を可視ウィンドウ枠外へ押し出します。その結果、ユーザーが緑色領域(通常使う部分)内で角を掴もうとすると、クリックが許容領域外に落ちてリサイズが失敗します。見える角のすぐ外側、同じ 19×19 ピクセル帯内でのみクリックが成功し、リサイズが起動します。以前の macOS バージョンでは、このターゲットの約 62% がウィンドウ内部に配置されており、ユーザーの期待に合っていました。筆者はほぼ四十年にわたるコンピュータ使用経験の中でこのような問題を一度も遭遇したことがありません。この不一致はフラストレーションと生産性低下を招きます。開発者は対策を設計するか、Apple にバグ報告を提出する必要があります。 ---

2026/01/12 6:29

2026 年はセルフホスティング(自前で運用すること)の年です。

## 日本語訳: > 本記事は、Claude Code CLI エージェントを利用することで、誰でも低価格のミニPCで完全に機能的なホームサーバーを構築できることを示しており、深いシステム管理スキルが不要になる点を強調しています。Beelink Mini N150($379)に8 TB NVMe SSDを搭載し、著者はUbuntu 22.04 LTS をインストールし、セキュアネットワーク用に Tailscale を追加、その後 SSH で Claude Code をインストールします。シンプルな英語のプロンプトを発行するだけで、Claude Code は自動的に Docker を設定し、Compose ファイルを作成し、サービス(Vaultwarden, Plex, Immich, Uptime Kuma, Caddy, Home Assistant, ReadDeck)をデプロイし、リバースプロキシを構築し、永続性を確保し、更新とセキュリティパッケージを管理し、ブート時の再起動も可能にします。 > > Vaultwarden は軽量な Bitwarden 互換パスワードマネージャーとして機能し、Immich は Google Photos の代わりにモバイルアプリ、ローカル顔認識、タイムライン/マップビューを提供します。ReadDeck は Mozilla Pocket を補完するクリーンな UI と読み続行機能を備えています。Lazydocker(Docker コンテナ UI)や Glances(システムモニタリング)などの追加ユーティリティもスタックを完成させます。著者は低い消費電力(CPU 約6 %、メモリ約32 %)を指摘し、保守作業がサーバーを所有する感覚に近く、問題は SSH と Claude Code への英語プロンプトで解決できると強調しています。 > > 対象読者はターミナル操作に慣れたユーザーで、既に SaaS サービスの料金を支払っているが、フルインフラ専門家になることなく基盤システムを理解したい人々です。本記事は、ミニPC 上で Claude Code を利用したセルフホスティングが今や実現可能で楽しく、今年おすすめできると結論付けています。

2026/01/12 7:14

このゲームは、Windows・Linux・ブラウザ上で動作する単一の13 KiBファイルです。

<|channel|>final <|constrain|>## Japanese Translation: 記事では、1つのソースファイルが「ポリグロット」バイナリを生成する方法を示しています。このバイナリには、Windows、Linux/BSD、およびブラウザ用にコンパイルされた3つの小さなプログラム(スネークゲーム)がすべて含まれており、合計13 312バイトです。コードはJustine Tunneyのcosmopolitan libcアイデアを使用し、各プラットフォームでネイティブに実行できる<16 KiBの実行ファイルを生成します。 3つのビルドが作成されます: • WinAPI用C(i686 Visual C)– 画面スクリプトとしても機能する非従来型PEヘッダーを使用。スタブはゲームを解凍して起動し、最初に再実行まで0xc0000005エラーが表示されます。 • Linux/X11用C(x86_64 clang)– lzmaデコンプレッションとシェルドロッパーを使用してファイルからELF64バイナリを抽出します。 • ブラウザ用JavaScript – ブラウザは先頭の無害なゴミを無視し、CSSで隠し、HTML/Canvasゲームがこの余白後に開始されます。 各コンパイル済み/ミニファイド版は約3–5 KiBです。3つのバイナリは順序通りに連結され、各オペレーティングシステムまたはブラウザが自分のセクションを実行します。元のゲームソースは13 772バイトでしたが、パッキングと連結後、正確に13 312バイトになります。 ゲームプレイの詳細(パッケージング物語の一部ではなく、キーポイントで言及されている)は次の通りです: - スネークは食べ物を食べることで成長し、壁を避けます。 - 操作:矢印キー/WASDキー、ESCで終了、Rでリセット、Pで一時停止、Spacebarで開始。 - スコア:フルーツごとに+10、黄色のフルーツは+20。フルーツは一定レートで生成され、スネーク速度/長さに比例した時間が経過すると消えます。 - 10個のフルーツ後、ランダム壁を含むレベル変更が行われ、ヘッドから任意の食べ物へのパスが保証されます。初期スネーク位置はランダムですが、向いている方向に少なくとも5つの空きタイルがあります。 このプロジェクトは、複数のオペレーティングシステムとウェブブラウザ用の実行コードを1ファイルにまとめることができることを示し、小規模プログラムの軽量でプラットフォーム非依存的な展開の可能性を開きます。

**FUSEはすべての必要を満たす―ファイルシステムを通じてエージェントがあらゆるものへアクセスできる** FUSE(Filesystem in Userspace)は、エージェントがまるでローカルファイルシステムに接続しているかのように、任意のデータソースとシームレスにやり取りできるようにします。これにより、多様なリソースへ統一されたインターフェースでアクセスすることが可能になります。 | そっか~ニュース