PyClaw — 拡張可能な個人用AIエージェント基盤

AI/ML

概要

PyClaw は FastAPI と LangGraph を核にした「自分専用の AI アシスタント基盤」です。LangChain 系のワークフローや PostgreSQL ベースのセッションチェックポイント(記憶)を組み合わせ、拡張モジュール(tools/skills)を動的に追加・ホットリロードできる点が特徴です。チャット API(POST /api/v1/chat)と CLI 両方の利用経路を持ち、cron ジョブの管理やファイル監視による自動再読込もサポート。単一拡張の障害が他へ波及しない設計や、ページ取得やスキル読み込みの内蔵ユーティリティを備え、個人利用から試作的なエージェント開発まで幅広く使えます。

GitHub

リポジトリの統計情報

  • スター数: 9
  • フォーク数: 0
  • ウォッチャー数: 9
  • コミット数: 4
  • ファイル数: 15
  • メインの言語: Python

主な特徴

  • セッション記憶を PostgreSQL に永続化(checkpointer/store)
  • 拡張ツール(extensions/*)の自動スキャンとホットリロードをサポート
  • Chat API と CLI の二重インターフェース、session_id による会話継続
  • cron ジョブ管理とファイル変更監視による自動実行

技術的なポイント

PyClaw は FastAPI を Web サーバとして使い、LangGraph(および LangChain 系の考え方)を組み合わせてエージェント挙動を構築しています。会話の永続化には PostgreSQL を用いる checkpointer/store モジュールを用意しており、session_id で複数会話を識別して継続できます。拡張機構は extensions ディレクトリ内の extension.py を自動スキャンし、TOOL/TOOLS として定義された機能をランタイムに読み込むため、拡張の追加・更新が容易です。加えて拡張のホットリロード用エンドポイント(POST /api/v1/extensions/reload)を提供し、個別拡張の失敗が他に影響しないよう例外を局所化して安全性を高めています。内蔵ツールには skills/ 下の SKILL.md 読み込み、fetch_url による Web 抽出、cron の読取管理などがあり、cron/jobs.json を監視して変更時に自動リロードすることで自動化ワークフローを実現します。なお、拡張が任意の Python コードを実行するため、運用時は権限管理やサンドボックス化、依存関係分離(仮想環境・コンテナ)を検討する必要があります。

プロジェクトの構成

主要なファイルとディレクトリ:

  • .env.example: file
  • .gitignore: file
  • .python-version: file
  • LICENSE: file
  • README.md: file

…他 10 ファイル

README の抜粋(要点)

  • チャット:POST /api/v1/chat(session_id で続きの会話)
  • 拡張ホットリロード:POST /api/v1/extensions/reload
  • 内蔵ツール:load_skill(skills/*/SKILL.md 読込)、fetch_url(ウェブテキスト取得)、cron 管理(cron/jobs.json)
  • 拡張システム:extensions/*/extension.py 自動スキャン、TOOL/TOOLS サポート、単一失敗は他に影響しない
  • cron:起動時自動ロード、cron/jobs.json 変更監視、自動リロードと手動実行の両対応

導入と運用のポイント(補足)

  • 環境変数は .env.example を参考に設定。Python バージョン管理ファイルあり。.python-version を確認してください。
  • 永続化(会話メモ)に PostgreSQL を使うため DB の準備と接続情報を環境変数へ設定する必要があります。
  • 拡張は extensions 配下の構成に従って追加。ホットリロード機能によりデプロイ不要で機能追加が可能ですが、実行権限や依存ライブラリに注意してください。
  • セキュリティ改善案:拡張をコンテナで分離、依存を明示した requirements、実行時の権限制御、入力のサニタイズなど。

まとめ

拡張性と永続会話を両立した個人向け AI エージェント基盤。手軽にスキル追加・自動化が試せる点が魅力。

リポジトリ情報: