
2025/12/18 15:19
**FWS – PTY/パイプ/dtach バックエンド対応の、pip でインストール可能な埋め込み型プロセス監視ツール**
RSS: https://news.ycombinator.com/rss
要約▶
Japanese Translation:
## Summary Framework Shells(`fws`)は、ユーザーが長時間実行されるバックグラウンドプロセス(「シェル」)を起動・管理・監視できる軽量Pythonパッケージです。フルサーバー管理スタックをデプロイせずに、PTY、パイプ、dtachのいずれかのバックエンドを使用できます。各シェルのランタイムは隔離されたキャッシュディレクトリ(`~/.cache/framework_shells/runtimes/<repo_fingerprint>/<runtime_id>/…`)に保存されます。また、コマンドラインインターフェースとオプションでFastAPI/WebSocket UIを提供し、シェルの一覧表示、ログ閲覧、ライフサイクル操作が可能です。 プロジェクトは外部レジストリやテレメトリーサービスとの統合を許可する**hooks**を備えています。セキュリティは`FRAMEWORK_SHELLS_SECRET`で制御されます:設定されている場合、秘密鍵から`runtime_id`とAPIトークンが派生し、変更可能なエンドポイントにはベアラートークンが必要です。秘密鍵が未設定(開発モード)では認証は無効化され、同一OSユーザー/UIDを共有する2つのランタイム間でクロスプロセスシグナリングが発生する場合があります。 典型的な使用例として、以下のようなコマンドが挙げられます:
fws list fws run --backend pty --label demo -- bash -l -i fws up shells.yaml fws down fws attach <shell_id> fws tree --depth 4
バックエンド、作業ディレクトリ、サブグループ、動的ポート割り当てを定義する`shellspec` YAMLのサンプルが提供されています。 `fws`は軽量なコンテキスト(クイックプロトタイプ、開発環境セットアップ、または重いスーパーバイザーが不要な制限付きユーザーランド)に適しており、「アプリ=シェル」(ターミナル、IDE + LSP、エージェント/MCP、aria2 RPC、ファイルエクスプローラー、llama.cppランナーなど)のフル開発環境を構築するための基盤として機能します。これはTermux‑Extensions‑2リポジトリで実証されています。 このプロジェクトは、秘密鍵/フィンガープリント/ランタイム分離契約、潜在的なAPI/CLIの落とし穴、およびsystemd、supervisord、tmux、dtachなどの代替手段との比較に関するフィードバックを歓迎します。
本文
Framework Shells(
)fws
PTY、パイプ、dtach をバックエンドに使って長時間実行されるバックグラウンドプロセス(「シェル」)をオーケストレーションする軽量 Python パッケージです。
主な機能
-
シェルの生成/管理
- PTY – インタラクティブ端末セッション(リサイズ、入力、ストリーム)
- パイプ – stdin/stdout/stderr ストリーム(デーモンや LSP に最適)
- dtach – 永続的なセッション。attach/detach が可能で、マネージャ再起動時も存続します。
-
ランタイムの分離
シェルは以下の名前空間に格納されます。
~/.cache/framework_shells/runtimes/<repo_fingerprint>/<runtime_id>/…
同一リポジトリのクローンが同時に走っても、相互に採用・制御しないようになっています。 -
操作インターフェース – CLI と任意で FastAPI/WS UI による一覧表示、ログ確認、ライフサイクル管理。
-
ホスト統合用のオプションフック(外部レジストリやテレメトリーへの連携)。
CLI クイックスタート
# シェル一覧を表示 fws list # 一時的なシェルを起動(仕様なし) fws run --backend pty --label demo -- bash -l -i # 推奨:YAML でシェル仕様を適用 fws up shells.yaml # シェルを停止 fws down # dtach バックエンドのシェルに attach fws attach <shell_id> # 管理対象シェルとその procfs 後継プロセスを表示(深さ4) fws tree --depth 4
シェル仕様例
version: "1" shells: worker: backend: proc cwd: ${ctx:PROJECT_ROOT} subgroups: ["worker", "project:${ctx:APP_ID}"] command: ["python", "-m", "your_module.worker", "--port", "${free_port}"]
隔離・セキュリティモデル(デフォルトはシンプル)
| Feature | Description |
|---|---|
| (名前空間)と API トークンを導出。 |
| 認証有効時 | 変更系 API エンドポイントは (または )が必須。 |
| 認証無効時 | シークレット未設定なら認証はオフ(開発モード)。 |
| OS レベルの制限 | 同一 OS ユーザー/UID を共有していると、OS から相互にシグナルを送れる可能性があります。保証されるのは ライブラリのコントロールプレーン経由での相互カウント/採用/制御が無い ことです。 |
実際の利用例
「アプリ=シェル」という完全な開発環境の基盤として使っています(ターミナル、IDE+LSP、エージェント/MCP、aria2 RPC、ファイルブラウザ、llama.cpp ランナーなど)。
リポジトリ:
https://github.com/mrsurge/termux-extensions-2
フィードバックを求めるポイント
- シークレット/フィンガープリント/ランタイム隔離の契約は妥当か?
- デフォルト API/CLI で明らかな落とし穴はあるか?
- systemd / supervisord / tmux / dtach と比較して、どこで使うべきか?
pip install "framework-shells @ git+https://github.com/mrsurge/framework-shells@main" fws --help