Agent Skills by ALSEL
汎用LLM・AI開発⭐ リポ 2,321品質スコア 95/100

claw-compactor

Claw Compactor — OpenClawエージェント向けの6層トークン圧縮スキルです。決定論的ルールエンジンと、リアルタイムのLLM駆動型Observational Memory システムであるEngramを組み合わせることで、ワークスペースのトークン支出を50~97%削減します。セッション開始時に実行すると、自動的に削減効果をレポートします。

description の原文を見る

Claw Compactor — 6-layer token compression skill for OpenClaw agents. Cuts workspace token spend by 50–97% using deterministic rule-engines plus Engram: a real-time, LLM-driven Observational Memory system. Run at session start for automatic savings reporting.

SKILL.md 本文

Claw Compactor — OpenClawスキルリファレンス

概要

Claw Compactorは、6つの圧縮層を使用してOpenClawワークスペース全体のトークン使用量を削減します:

名前コスト説明
1Rule Engine無料重複排除、フィラー削除、セクション統合
2Dictionary Encoding無料自動コードブック、$XX置換
3Observation Compression無料セッションJSONL→構造化サマリー
4RLE Patterns無料パス/IP/列挙型短縮記法
5Compressed Context Protocol無料フォーマット省略
6EngramLLM APIリアルタイム観察メモリ

スキル場所: skills/claw-compactor/
エントリーポイント: scripts/mem_compress.py
Engram CLI: scripts/engram_cli.py


オートモード(推奨 — セッション開始時に実行)

python3 skills/claw-compactor/scripts/mem_compress.py <workspace> auto

ワークスペースのすべてのファイルを自動的に圧縮し、実行間のトークン数を追跡して、削減額を報告します。セッション開始時に毎回実行してください。


コアコマンド

フルパイプライン(すべての層)

python3 scripts/mem_compress.py <workspace> full

最適な順序で5つの決定論的層すべてを実行します。通常:50%以上の複合削減。

ベンチマーク(非破壊的)

python3 scripts/mem_compress.py <workspace> benchmark
# JSON出力:
python3 scripts/mem_compress.py <workspace> benchmark --json

ファイルを書き込まずに潜在的な削減額を示すドライラン報告。

個別の層

# 層1:ルールベース圧縮
python3 scripts/mem_compress.py <workspace> compress

# 層2:辞書エンコーディング
python3 scripts/mem_compress.py <workspace> dict

# 層3:観察圧縮(セッションJSONL→サマリー)
python3 scripts/mem_compress.py <workspace> observe

# 層4:RLEパターンエンコーディング(`compress`内で実行)
# 層5:トークナイザー最適化
python3 scripts/mem_compress.py <workspace> optimize

# 階層別サマリー(L0/L1/L2)
python3 scripts/mem_compress.py <workspace> tiers

# クロスファイル重複排除
python3 scripts/mem_compress.py <workspace> dedup

# トークンカウント報告
python3 scripts/mem_compress.py <workspace> estimate

# ワークスペースヘルスチェック
python3 scripts/mem_compress.py <workspace> audit

グローバルオプション

--json          マシン可読JSON出力
--dry-run       ファイル書き込みなしでプレビュー
--since DATE    日付でセッションをフィルタリング(YYYY-MM-DD)
--auto-merge    重複を自動マージ(dedupコマンド)

Engram — 層6:リアルタイム観察メモリ

Engramはフラグシップ層です。会話と並行してライブエンジンとして動作し、メッセージを自動的に構造化された優先度付きナレッジに圧縮します。

前提条件

engram.yaml(推奨)または環境変数経由で設定します:

# engram.yaml — claw-compactorルートに配置
llm:
  provider: openai-compatible
  base_url: http://localhost:8403
  model: claude-code/sonnet
  max_tokens: 4096

threads:
  default:
    observer_threshold: 30000    # Observerが発動するまでの保留中トークン
    reflector_threshold: 40000   # Reflectorが発動するまでの観察トークン

concurrency:
  max_workers: 4                 # 並列スレッドワーカー
# 代替:環境変数
export ANTHROPIC_API_KEY=sk-ant-...   # 推奨
# または
export OPENAI_API_KEY=sk-...          # OpenAI互換フォールバック
export OPENAI_BASE_URL=https://...    # オプション:カスタムエンドポイント(ローカルLLM等)

Engram オートモード(本番環境向け推奨)

すべてのアクティブなスレッドを自動検出し、並行して処理します(4ワーカー):

# 単一実行 — すべてのスレッドを自動検出
python3 scripts/engram_auto.py --workspace ~/.openclaw/workspace

# シェルラッパー経由
bash scripts/engram-auto.sh

# CLI経由
python3 scripts/engram_cli.py <workspace> auto --config engram.yaml
python3 scripts/engram_cli.py <workspace> status --thread openclaw-main
python3 scripts/engram_cli.py <workspace> observe --thread openclaw-main
python3 scripts/engram_cli.py <workspace> reflect --thread openclaw-main

リトライ: LLM呼び出しは429/5xxで指数バックオフでリトライします(2s→4s→8s、最大3試行)。 400/401/403ではリトライしません(設定エラーで即座に失敗)。

統合エントリーポイント経由のEngram

# すべてのスレッドステータスをチェック
python3 scripts/mem_compress.py <workspace> engram status

# スレッドに対してObserverを強制実行
python3 scripts/mem_compress.py <workspace> engram observe --thread <thread-id>

# スレッドに対してReflectorを強制実行
python3 scripts/mem_compress.py <workspace> engram reflect --thread <thread-id>

# 挿入可能なコンテキストを出力
python3 scripts/mem_compress.py <workspace> engram context --thread <thread-id>

専用CLI経由のEngram

# ステータス:すべてのスレッド
python3 scripts/engram_cli.py <workspace> status

# ステータス:単一スレッド
python3 scripts/engram_cli.py <workspace> status --thread <thread-id>

# 観察を強制実行
python3 scripts/engram_cli.py <workspace> observe --thread <thread-id>

# 反映を強制実行
python3 scripts/engram_cli.py <workspace> reflect --thread <thread-id>

# ファイルから会話をインポート(JSONアレイまたはJSONL)
python3 scripts/engram_cli.py <workspace> ingest \
    --thread <thread-id> --input /path/to/conversation.jsonl

# 挿入可能なコンテキスト文字列を取得(システムプロンプト用)
python3 scripts/engram_cli.py <workspace> context --thread <thread-id>

# 任意のコマンドのJSON出力
python3 scripts/engram_cli.py <workspace> status --json
python3 scripts/engram_cli.py <workspace> context --thread <id> --json

Engramデーモンモード(リアルタイムストリーミング)

# デーモン起動、stdを経由してJSONLメッセージをパイプ
python3 scripts/engram_cli.py <workspace> daemon --thread <thread-id>

# メッセージをパイプ:
echo '{"role":"user","content":"Hello!","timestamp":"12:00"}' | \
    python3 scripts/engram_cli.py <workspace> daemon --thread <thread-id>

# コントロールコマンド(JSONLとして送信):
echo '{"__cmd":"observe"}'   # 今すぐ観察を強制実行
echo '{"__cmd":"reflect"}'   # 今すぐ反映を強制実行
echo '{"__cmd":"status"}'    # スレッドステータスJSONを出力
echo '{"__cmd":"quit"}'      # デーモンを終了

# クワイエットモード(stderrのスタートアップメッセージを抑制)
python3 scripts/engram_cli.py <workspace> daemon --thread <id> --quiet

Engram Python API

from scripts.lib.engram import EngramEngine

engine = EngramEngine(
    workspace_path="/path/to/workspace",
    observer_threshold=30_000,     # 自動観察前のトークン
    reflector_threshold=40_000,    # 自動反映前のトークン
    anthropic_api_key="sk-ant-...", # または環境変数ANTHROPIC_API_KEYを設定
)

# メッセージを追加 — 閾値を超えると自動的にobserve/reflectがトリガーされます
status = engine.add_message("thread-id", role="user", content="Hello!")
# 戻り値: {"observed": bool, "reflected": bool, "pending_tokens": int, ...}

# 閾値に関わらず手動でトリガー
obs_text = engine.observe("thread-id")    # 保留中のメッセージがない場合はNoneを返す
ref_text = engine.reflect("thread-id")   # 観察がない場合はNoneを返す

# 完全なコンテキスト辞書を取得
ctx = engine.get_context("thread-id")
# 戻り値: {"thread_id", "observations", "reflection", "recent_messages", "stats", "meta"}

# 挿入可能なシステムコンテキスト文字列をビルド
ctx_str = engine.build_system_context("thread-id")
# システムプロンプトの先頭に追加する準備完了

Engram設定変数

変数デフォルト説明
ANTHROPIC_API_KEYAnthropicのAPIキー(推奨)
OPENAI_API_KEYOpenAI互換APIキー
OPENAI_BASE_URLhttps://api.openai.comローカルLLM用のカスタムエンドポイント
OM_OBSERVER_THRESHOLD30000自動観察前の保留中トークン
OM_REFLECTOR_THRESHOLD40000自動反映前の観察トークン
OM_MODELclaude-opus-4-5LLMモデルオーバーライド

閾値チューニング クイックリファレンス

各Observer呼び出しは約2Kの出力トークン(Sonnet)を生成します。デフォルト30K閾値での日次ボリューム:

チャネル日次トークン@30K閾値@10K閾値
#aimm~149K~5×/日~15×/日
openclaw-main~138K~4.5×/日~14×/日
#open-compress~68K~2.3×/日~7×/日
#general~62K~2×/日~6×/日
subagent~43K~1.4×/日~4×/日
cron~9K~0.3×/日~1×/日
合計~470K/日~16×/日(~32K出力トークン)~47×/日(~94K出力トークン)

observer_threshold: 30000から開始します。より新鮮なコンテキストのためにチューンダウン、コスト削減のためにチューンアップします。

Engram ベンチマーク概要

戦略トークン削減ROUGE-LIR-F1レイテンシLLM呼び出し
Engram (L6)87.5%0.0380.414~35秒2
RuleCompressor (L1–5)9.0%0.9230.958~6ms0
RandomDrop21.5%0.8520.911~0ms0
  • Engramの低ROUGE-L = セマンティック再構成で逐語的コピーではない — 意図は保持されます
  • 即座のプロンプト圧縮にはRuleCompressorを使用。長期メモリにはEngramを使用。
  • 完全な結果 → benchmark/RESULTS.md

観察フォーマット

Engramは構造化された二言語(英語/中文)優先度付きログを生成します:

Date: 2026-03-05
- 🔴 12:10 ユーザーがOpenCompress構築中、deadline一週間内 / 用户在构建 OpenCompress,deadline 一周内
  - 🔴 12:10 ModernBERT-largeを使用 / 使用 ModernBERT-large
  - 🟡 12:12 アノテーション戦略を議論 / 讨论了标注策略
- 🟡 12:30 M3 Ultraでのデプロイメントパイプラインの討論
- 🟢 12:45 ユーザーは簡潔な返信を優先
  • 🔴 重大 — 目標、期限、ブロッカー、重要な決定(削除されない)
  • 🟡 重要 — 技術詳細、進行中の作業、嗜好
  • 🟢 有用 — 背景、言及、ソフトコンテキスト

メモリストレージレイアウト

memory/engram/{thread_id}/
├── pending.jsonl      # 未観察のメッセージバッファ(observe後に自動クリア)
├── observations.md    # Observer出力 — 追記専用構造化ログ
├── reflections.md     # Reflector出力 — 圧縮長期メモリ(上書き)
└── meta.json          # タイムスタンプとトークンカウント

OpenClawメモリシステムとの統合

システムプロンプト注入

各セッション開始時にEngramコンテキストを注入します:

from scripts.lib.engram import EngramEngine

engine = EngramEngine(workspace_path)
ctx_str = engine.build_system_context("my-session")
if ctx_str:
    system_prompt = ctx_str + "\n\n" + base_system_prompt

build_system_context()の出力構造:

## Long-Term Memory (Reflections)
<Reflector出力 — 長期圧縮コンテキスト>

## Recent Observations
<Observer出力の直近200行>

<!-- engram_tokens: 1234 -->

Engramと決定論的層を組み合わせる

Engramセッション後、決定論的パイプラインを出力ファイルに対して実行します:

# Engramはobservations.mdとreflections.mdを生成
# 次にそれらにさらに圧縮を適用:
python3 scripts/mem_compress.py <workspace> full

長時間実行エージェントセッション用の推奨ワークフロー

  1. セッション開始: build_system_context()をシステムプロンプトに注入
  2. 各メッセージ: engine.add_message()を呼び出し — observe/reflectが自動的にトリガー
  3. セッション終了 / 週次cron: ワークスペースに対してfullパイプラインを実行
  4. マルチセッション継続性: コンテキストはmemory/engram/{thread}/に永続化

OpenClawスキルのインストール

OpenClawスキルとしてインストールするには、スキルディレクトリが以下の場所で利用可能であることを確認してください:

~/.openclaw/workspace/skills/claw-compactor/

またはOpenClawスキルレジストリでパスを設定してください。

SKILL.mdはOpenClawエージェントディスパッチャーによって読み込まれます。上記のdescriptiontriggersフィールドは、このスキルが自動的にアクティベートされるタイミングを制御します。


ハートビート / Cron自動化

## メモリメンテナンス(週次)
- python3 skills/claw-compactor/scripts/mem_compress.py <workspace> benchmark
- 削減額 > 5%の場合:フルパイプラインを実行
- Engram保留中メッセージがある場合:engram observe --thread <id>を実行

Cron(日曜日 午前3時):

0 3 * * 0 cd /path/to/skills/claw-compactor && \
  python3 scripts/mem_compress.py /path/to/workspace full

出力成果物リファレンス

成果物場所説明
辞書コードブックmemory/.codebook.jsonメモリファイルと一緒に保存する必須
観察セッションログmemory/.observed-sessions.json処理されたトランスクリプトを追跡
層3サマリーmemory/observations/観察圧縮出力
Engram観察memory/engram/{thread}/observations.mdライブObserverログ
Engram反映memory/engram/{thread}/reflections.md抽出された長期メモリ
レベル0サマリーmemory/MEMORY-L0.md~200トークン超圧縮サマリー
レベル1サマリーmemory/MEMORY-L1.md~500トークン圧縮サマリー

トラブルシューティング

問題解決方法
ワークスペースでFileNotFoundErrorパスをmemory/を含むワークスペースルートを指す
辞書の解凍に失敗memory/.codebook.jsonが有効なJSONであることを確認
ベンチマークで削減率がゼロワークスペースは既に最適化済み
observeがトランスクリプトを見つけないsessions/.jsonlファイルを確認
Engram:"APIキーが設定されていない"ANTHROPIC_API_KEYまたはOPENAI_API_KEYを設定
Engram ObserverがNoneを返すそのスレッドに保留中メッセージがない
トークンカウントが不正確に見えるtiktokenをインストール:pip3 install tiktoken

ライセンス: MIT(寛容ライセンスのため全文を引用しています) · 原本リポジトリ

詳細情報

作者
open-compress
リポジトリ
open-compress/claw-compactor
ライセンス
MIT
最終更新
2026/4/1

Source: https://github.com/open-compress/claw-compactor / ライセンス: MIT

本サイトは GitHub 上で公開されているオープンソースの SKILL.md ファイルをクロール・インデックス化したものです。 各スキルの著作権は原作者に帰属します。掲載に問題がある場合は info@alsel.co.jp または /takedown フォームよりご連絡ください。
原作者: open-compress · open-compress/claw-compactor · ライセンス: MIT