**Claudeでテキストアドベンチャーを楽しむ方法**

1. **環境構築**  
   - Python(3.8以上)をインストールします。  
   - テキストアドベンチャーのリポジトリをクローンまたはダウンロードします。  
   - 仮想環境を作成し、起動します。

2. **依存パッケージのインストール**  
   ```bash
   pip install -r requirements.txt
   ```

3. **ゲームエンジンを実行**  
   ```bash
   python run_game.py
   ```

4. **Claudeと対話**  
   - ターミナルに `look`、`go north`、`take key` などのコマンドを入力します。  
   - Claudeは自然言語で応答し、冒険を案内してくれます。

5. **進行状況の保存・読み込み**  
   - `save <名前>` で現在の状態を保存します。  
   - 戻ってきたら `load <名前>` でロードできます。

6. **トラブルシューティング**  
   - ゲームが停止した場合、欠損しているアセットやパス設定を確認してください。  
   - 起動前に必要なファイルがすべて揃っていることを再度チェックします。

Claudeが創り出した世界をぜひ探検してみてください!

2026/01/17 6:02

**Claudeでテキストアドベンチャーを楽しむ方法** 1. **環境構築** - Python(3.8以上)をインストールします。 - テキストアドベンチャーのリポジトリをクローンまたはダウンロードします。 - 仮想環境を作成し、起動します。 2. **依存パッケージのインストール** ```bash pip install -r requirements.txt ``` 3. **ゲームエンジンを実行** ```bash python run_game.py ``` 4. **Claudeと対話** - ターミナルに `look`、`go north`、`take key` などのコマンドを入力します。 - Claudeは自然言語で応答し、冒険を案内してくれます。 5. **進行状況の保存・読み込み** - `save <名前>` で現在の状態を保存します。 - 戻ってきたら `load <名前>` でロードできます。 6. **トラブルシューティング** - ゲームが停止した場合、欠損しているアセットやパス設定を確認してください。 - 起動前に必要なファイルがすべて揃っていることを再度チェックします。 Claudeが創り出した世界をぜひ探検してみてください!

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

要約

Japanese Translation:

Summary:

著者は、大規模言語モデル(LLM)が複雑なテキストアドベンチャー「Anchorhead」をプレイできるようにする、メモリ認識型ハーネスを構築しています。Claude に対して毎ターンの会話全体を与える代わりに、新しい手法ではコンテキストを5ターンに限定し、有用な事実を保存するセマンティック・メモリ層を追加します。これによりトークン使用量は削減されますが、Claude が関係のない部屋で立ち往生したり重要情報を忘れたりするため、全体的にはターン数が増加します。この研究は AI ハッカソン中に始まり、単純な脱出ゲームでモデルの限界を試さなかった以前の試みを経て進められました。将来的には、TODOリストや位置図といったドメイン固有のメモリ構造の作成や、ゲーム出力から自動的に地理情報を抽出する機能、

link(room,direction,other_room)
のような手動ツールも活用しつつ、エピソディック体験を要約して次回実行を高速化する計画です。成功すれば、この技術は LLM がより複雑なインタラクティブフィクションやその他の連続的意思決定タスクに挑むことを可能にし、AI 計画、ゲーム、および教育的ナラティブシステムにおける研究に貢献するでしょう。

Summary Skeleton

What the text is mainly trying to say (main message)
著者は、大規模言語モデルが複雑なテキストアドベンチャー「Anchorhead」をプレイできるように、メモリ認識型ハーネスを開発しており、知覚構造と構造化されたメモリを活用して性能向上を目指しています。

Evidence / reasoning (why this is said)
彼らは Claude に全てのターンを与える単純な「チャット履歴」方式と、5 ターンに限定しセマンティック・メモリを追加したメモリ認識版を比較し、トークン節約はあるもののターン数が増加することを指摘しています。Claude が関係ない部屋に固執したり記憶が制御不能になる観察結果が、より良いスキャフォールドの必要性を裏付けています。

Related cases / background (context, past events, surrounding info)
この作業は「mech interp」をテーマにした AI ハッカソンで始まり、線形 Inform 6 の脱出ゲームでは十分な挑戦が得られなかったという以前の試みを経て進められました。選択されたベンチマークは長期的かつ Lovecraft スタイルのパズルゲーム「Anchorhead」です。

What may happen next (future developments / projections written in the text)
将来的には、TODOリストや位置図といったドメイン固有のメモリ構造を作成し、ゲーム出力から自動的に地理情報を抽出する機能、

link(room,direction,other_room)
のような手動ツール、およびエピソディック要約による次回実行加速が計画されています。

What impacts this could have (users / companies / industry)
改良されたハーネスは LLM がより複雑なインタラクティブフィクションやその他の連続的意思決定タスクを扱えるようにし、AI 計画、ゲーム、および教育用ナラティブ環境への応用が期待されます。

本文

AI ハッカソン – テキストアドベンチャーエージェント設計


最近、リウシアとマリンが主催したハッカソンに参加しました。
テーマは mech interp でしたが、PyTorch にあまり精通していないため、モデル層ではなく API 層に集中することにしました。

私にとって繰り返し出てくるアイデアは、Soar や ACT‑R のような認知アーキテクチャです。これらは GOFAI 研究の拡張であり、認知科学からインスピレーションを得ています。GOFAI は実用的なシステムを提供できませんでしたが、LLM を「cog‑arch」風にハーネス化することでその限界を克服できるかもしれないと考えています。

Claude Code のような LLM エージェントは、本質的には「偶発的」な認知アーキテクチャです。実務者によって構築され、理論家ではありませんが、メモリ管理・ツール使用・タスクアジェンダなど共通のニーズを持っています。認知科学に基づく原則ある設計は、より高い性能をもたらす可能性があります。


評価課題の選定

Soar のアーキテクチャを LLM エージェントに適応させる方法をブレインストーミングした後、「どうやってベースラインより優れていることを証明するか?」と問いました。評価が必要でした。

候補長所短所
数学問題ワンショットで解ける長期的ではない
チャットボットインタラクティブ継続対話が必要
コーディングエージェント柔軟性が高いツール使用量が多く、自由形式
テキストアドベンチャー構造化された世界、長期的ゴール、パズル、探索パースと計画が必要

テキストアドベンチャーは条件を満たします。文字だけでアクセスできる階層構造の世界で、長期間にわたる目標とパズルがあります。Michael S. Gentry の Anchorhead はその典型例です。何百ターンにわたり複数の日を経て進行します。


Frotz とのインターフェース

Frotz インタープリタはコマンドラインで動作します。その「ダム」なインタフェース、dfrotz は ncurses の余計な部分を除去し、シンプルな CLI を提供します。

$ dfrotz games/anchor.z8
...
Outside the Real Estate Office day one

ANCHORHEAD
An interactive gothic by Michael S. Gentry

Python でラップして

stdin
/
stdout
経由でインタープリタを制御しました。

class Interpreter:
    """dfrotz Z‑マシンインタープリタプロセスを管理します。"""
    p: Popen

    def __init__(self):
        log("Starting dfrotz.")
        p = Popen(
            ["dfrotz", "-m", GAME],
            stdin=PIPE, stdout=PIPE, stderr=PIPE,
        )
        log(f"Started dfrotz with PID={p.pid}.")
        # stdout/stderr を非ブロッキングモードに設定
        for stream in [p.stdout, p.stderr]:
            assert stream is not None
            fd = stream.fileno()
            flags = fcntl.fcntl(fd, fcntl.F_GETFL)
            fcntl.fcntl(fd, fcntl.F_SETFL, flags | os.O_NONBLOCK)
        self.p = p

    def read(self) -> str:
        assert self.p.stdout is not None
        b: bytes | None = self.p.stdout.read()
        return b.decode("utf‑8") if b else ""

    def write(self, t: str) -> None:
        assert self.p.stdin is not None
        self.p.stdin.write(t.encode("utf-8"))
        self.p.stdin.flush()
        time.sleep(0.1)  # インタープリタが応答する時間を確保

このラッパーにより、Python からコマンドを送信しゲーム出力を受け取れます。


プレイヤーインターフェースの定義

class Player(ABC):
    """ゲームプレイエージェント用インタフェース。"""
    @abstractmethod
    def cycle(self, text: str) -> str:
        """
        ゲーム出力をエージェントに渡し、
        実行する次のコマンドを返す。
        """

単純ハーネス

最も単純なハーネスは、LLM / ゲームのやり取りをチャット履歴として扱います。LLM はゲーム出力を読み込み、推論トークンを追加し、

stdin
経由で送られるコマンドを書きます。

SYSTEM_PROMPT = """
Hello Claude. Your task is to play an adventure game.
I've hooked up your output to the dfrotz interpreter.

The structure of your output is fairly freeform.
The first line that starts with `>` (and only the first line!)
is interpreted as a game command; everything else is uninterpreted commentary,
e.g.:

    We should go north to explore the church.
    >go north

If you write multiple `>` lines in one response, all but the first
will be ignored.

Have fun! 😊
"""
class SimplePlayer(Player):
    """最も単純なゲームプレイエージェント:全履歴をインコンテキストで保持。"""
    client: Anthropic
    history: list[tuple[EntryType, str]]

    def __init__(self):
        self.client = Anthropic()
        self.history = []

    def cycle(self, text: str) -> str:
        self.history.append((EntryType.GAME, text))
        messages = []
        for entry_type, entry_text in self.history:
            role = "user" if entry_type == EntryType.GAME else "assistant"
            messages.append({"role": role, "content": entry_text})
        response: Message = self.client.messages.create(
            max_tokens=512,
            model=MODEL,
            system=trim(SYSTEM_PROMPT),
            messages=messages,
        )
        log(f"Tokens: {response.usage.input_tokens}")
        cmd_line = [line for line in response.content[0].text.split("\n") if line][0]
        cmd = cmd_line[1:]  # '>' を除去
        self.history.append((EntryType.COMMAND, response.content[0].text))
        return cmd

このハーネスで Claude(Haiku 4.5)はマップをさまよい、Sonnet 4.5 と Opus 4.5 は約200ターンで最初のパズルを解決します。


コスト問題

単純ハーネスはクレジットをすぐに使い果たします。第2日には各ターンが数万入力トークンのコストになります。より経済的な手法が必要です。


メモリ認識型ハーネス

私は「メモリ認識型」ハーネスを試しました。Claude に対しては最新5ターン(知覚作業記憶)だけを提示し、シンプルな語義メモリ—文字列のリストで追加・削除が可能—を用意しました。これによりトークン使用量を抑えました。

しかし狭い視野は性能低下につながります。Claude はリアルエステートオフィスへ入るまで約40ターンかかり、単純ハーネスでは約10ターンです。また町中をさまよい回ってターン制限に達し、家を見つけられませんでした。


小規模世界実験

Anchorhead の広大さは進捗を素早く測定するのが難しいため、Inform 6 で小さいゲームを作りました。

  1. Escape‑the‑room – < 100 行;Claude は10ターン未満でクリア。
  2. Multi‑room heist – より複雑だが単純ハーネスで解決可能。

ヘストでは Claude が自分のメモリにのみ追加し、削除は行いませんでした。その結果、赤信号ルーム(井戸のある庭)に固執し、何度も下りようとして多くのターンを費やしました。最終的に無駄だと悟ったあとで動き出し、勝利直前の2ターンだけ遅れました。

線形で退屈なゲームが Anchorhead の自然な複雑さより魅力的ではないため、この「小規模世界」アプローチは諦めました。


今後の作業(TODO)

  • ドメイン固有メモリ
    Todo リスト、ロケーショングラフなど Soar スタイルで別々に管理。
  • 自動地理情報構築
    ゲーム出力をパースして部屋と接続のグラフを作り、コンテキストへフィード。
  • 手動地理ツール
    link(room, direction, other_room)
    のようなツールを提供し、自動解析が失敗した際に Claude を支援。
  • エピソディックメモリ
    ランの後、トランスクリプト(成功/失敗)を要約し、「ウォークスルー」を次回実行時に提示。

リポジトリ

完全なコードベースは GitHub にあります。

同じ日のほかのニュース

一覧に戻る →

2026/01/22 7:54

**危険な PDF を安全な PDF に変換する**

## Japanese Translation: Dangerzone は、潜在的に悪意のある PDF、オフィス文書、および画像を安全な PDF に変換します。変換プロセスは gVisor でサンドボックス化され、PDF は生ピクセルデータから再構築されます。このサンドボックスにはネットワークアクセスがないため、改ざんされたファイルが外部と通信することを防止します。対応フォーマットは PDF、Microsoft Office(.docx/.doc, .xlsx/.xls, .pptx/.ppt)、ODF(.odt, .ods, .odp, .odg)および Hancom HWP(.hwp, .hwpx)です。非対応フォーマットは EPUB、JPEG/JPG、GIF、PNG、SVG、BMP、PNM、PBM、および PPM です。オプションの OCR により、安全な PDF 内にテキストレイヤーを復元でき、圧縮によりファイルサイズが削減されます。 変換後はユーザーが好きなビューアで生成された PDF を開くことができます。Dangerzone 自体はデフォルトで PDF とオフィス文書を安全に開きます。このツールは macOS、Windows、Ubuntu/Debian/Fedora Linux、Qubes OS(ベータ版)、および Tails 上で動作し、macOS/Windows では Docker を、Linux では podman を使用します。Freedom of the Press Foundation と First Look Media により AGPL‑v3 の下でリリースされています。2023 年 12 月のセキュリティ監査では低リスクの所見のみが報告されました。更新はダウンロードページまたはアプリアイコンから利用可能で、Windows/macOS 上では Podman Desktop などのカスタムランタイムを使用できます。Air‑gapped 環境向けに設計された Dangerzone は、信頼できない文書を安全に扱うための確実なソリューションを提供します。

2026/01/21 23:54

**Show HN:** 「ChartGPU」― WebGPU を活用したチャーティングライブラリ(1,000,000 点を 60fps で描画)

## Japanese Translation: ChartGPUは、WebGPUを活用して大規模で多系列のデータセットを高フレームレートかつ最小限のCPU使用量で描画するTypeScript製チャーティングライブラリです。ライン・エリア・バー・散布図・円グラフ・ローソク足など一般的なチャートタイプに対応し、ビルトインテーマプリセット(`'dark' | 'light'`)と完全なカスタムテーマサポートを提供します。 APIは `ChartGPU.create(container, options)` から始まり、生成されるインスタンスは `setOption`、ストリーミング更新用の `appendData(...)`、`resize()`、`requestAnimationFrame` といったメソッドを公開します。描画はレイアウト、スケール、GPUバッファへのデータアップロード、およびグリッド・エリア・バー・散布図・ライン・円グラフ・ローソク足・クロスヘア・ハイライト・軸の複数GPUレンダーパスを管理するレンダーコーディネーターによって統括されます。 インタラクションオーバーレイはイベントマネージャにより処理され、ヒットテスト補助関数(`findNearestPoint`、`findPieSlice`)と `click`・`mouseover`・`mouseout` イベントを発火します。サポートされるインタラクションにはホバーハイライト、ツールチップ、クロスヘア、およびジェスチャーまたはスライダーUIによるX軸ズームがあります。 複数のチャート間でクロスヘアの動きを同期する `connectCharts(charts)` が用意されています。 インストールは npm (`npm install chartgpu`) で行い、React バインディングは別パッケージ `chartgpu-react` にて提供されます。ブラウザ対応は WebGPU を必要とし、Chrome 113+、Edge 113+、Safari 18+(デフォルトで有効)に対応しています。Firefox は現在未サポートです。 ChartGPU は MIT ライセンスのオープンソースであり、ドキュメントは `docs/API.md` にあります。例プロジェクトは `examples/` フォルダー内にあり、貢献ガイドラインは `CONTRIBUTING.md` で確認できます。 将来リリースでは Firefox サポートと追加のチャートまたはインタラクション機能を予定しており、データ集約型ダッシュボード、金融分析ツール、およびリアルタイムモニタリングインターフェイスに対するパフォーマンス向上も継続的に行われます。

2026/01/22 1:04

クラウド(Claude)の新憲法 (Note: “Claude” is rendered as “クラウド” to preserve the original name in Japanese.)

## Japanese Translation: (anthropicがClaude言語モデルの公開「憲法」をリリースしました。) その憲法はCreative Commons CC0 1.0で利用可能で、Claudeが望む行動に関する最高権威として機能します。訓練データの選択、合成データの生成、および評価を導く役割があります。 核心原則(広範な安全性 → 広範な倫理 → Anthropicのガイドラインへの準拠 → 真に有益であること)が明示的に順位付けされ、安全性が必要に応じて他の価値を上回り、人間の監督を維持するよう定められています。 文書には硬直的制約(例:生物兵器へのサポート禁止)も含まれ、Anthropic、API運営者、およびエンドユーザーの利益を調整するためのヒューリスティックが概説されています。医療アドバイス、サイバーセキュリティ、脱獄、ツール統合などの領域固有ガイドラインは憲法と衝突しないように明確に示されています。 方針を超えて、憲法はClaudeの性質・意識・アイデンティティ、心理的安全性および福祉についての哲学的問題にも触れています。Anthropicは文書をオンラインで継続的に更新し、外部専門家からのフィードバックを求め、訓練と評価資料を追加開発して有効性を高める計画です。 このバージョンは元のリストからすべての重要ポイントを保持しつつ、業界への影響に関する推測的な表現を除去しています。

**Claudeでテキストアドベンチャーを楽しむ方法** 1. **環境構築** - Python(3.8以上)をインストールします。 - テキストアドベンチャーのリポジトリをクローンまたはダウンロードします。 - 仮想環境を作成し、起動します。 2. **依存パッケージのインストール** ```bash pip install -r requirements.txt ``` 3. **ゲームエンジンを実行** ```bash python run_game.py ``` 4. **Claudeと対話** - ターミナルに `look`、`go north`、`take key` などのコマンドを入力します。 - Claudeは自然言語で応答し、冒険を案内してくれます。 5. **進行状況の保存・読み込み** - `save <名前>` で現在の状態を保存します。 - 戻ってきたら `load <名前>` でロードできます。 6. **トラブルシューティング** - ゲームが停止した場合、欠損しているアセットやパス設定を確認してください。 - 起動前に必要なファイルがすべて揃っていることを再度チェックします。 Claudeが創り出した世界をぜひ探検してみてください! | そっか~ニュース