スキル(ツール)
スキル は LLM が発動できる 1 つの自己完結した能力です。スキル フレームワークは LLM ツール登録、HTTP API、UI フォーム、パーミッション ゲート、監査ログを 1 つのメタデータ構造体から自動派生します —— 新規 スキルの追加は 1 ファイル書いて init() で Register を呼ぶだけです。
スキルは edge エージェント上で動けば L2(デバイス直達)、manager 上で 動けば L3(知能)です。どちらもファーストクラスです。
構造
各スキルは以下を出荷します:
// internal/skill/types.go:99
type Metadata struct {
Key string // lower_snake — id in dedupe keys, audit logs, LLM tool names
Name string // human label
Description string // shown to humans AND to the LLM
Class Class // safe | mutating | dangerous
Scope Scope // host (default) | manager
Category string // free-form group label
Params ParamSchema
ResultPreview string
}加えて Executor:
type Executor interface {
Metadata() Metadata
Execute(ctx context.Context, params json.RawMessage) (json.RawMessage, error)
}フレームワークは Scope に基づいて dispatch します:
ScopeHost—— manager が呼び出しをトンネル RPC (Caller.Call(ctx, edgeID, "execute_skill", body))でラップし、edge エージェントの単一execute_skillハンドラーがキーで dispatch します。 LLM ツールラッパーはスキーマに必須のedge_id整数プロパティを注入 します。ScopeManager—— プロセス内で動きます。edge_idなし。パブリック インターネット呼び出し(web_search)、外部 API、サブプロセススキル パックに便利。
パーミッションクラス
メタデータに組み込まれているので、毎回の発動でゲートが動きます —— 後付けではありません:
| クラス | 例 | 誰が発動できるか |
|---|---|---|
safe | probe_*、read_file、tail_file、query_promql | LLM、任意のロール |
mutating | restart_service、kill_process | human-in-the-loop の承認が必要(保留中だがゲートは存在) |
dangerous | rm、reboot、drop_table | RSA 署名済み SOP + デュアル承認が必要(保留中) |
デフォルトクラスは safe —— ですがフレームワークは登録時に作者が フィールドを設定し忘れると警告をログするので、これは静かに通り抜け られません。 types.go:205 参照。
aiops ツールレジストリの skill_bridge.go は現状 ClassSafe スキルのみを LLM に公開します —— skill_bridge.go 参照。mutating と dangerous クラスは PR-G4 の承認ワークフローを待ち ます。
3 つのスキル集団
Go builtin(edge)
internal/skill/builtin/ で手書き:
| Key | 何 |
|---|---|
probe_http、probe_dns、probe_tcp | 読み取り専用ネットワーク到達性 |
tail_file、read_journal | ログ表面 |
host_netns_inspect | ネットワーク namespace インベントリ |
web_search | manager 側、SearXNG デフォルト、設定可能 |
restart_service | mutating、ゲート対象 |
各々は init() で skill.Register を呼ぶ Go ファイル。edge バイナリは すべての builtin を焼き込み済み —— プラグインインストールなし、リモート コード実行表面なし。
サブプロセススキルパック
edge エージェントを再ビルドせずに投下したい能力には、skill.json マニフェストと実行可能ファイルを持つディレクトリを出荷します。 internal/skill/subprocess.go のローダーがマニフェストを読み、スキルを登録し、stdin パラメータで バイナリに Execute を dispatch します。
用途:ネットワーク調査ツール(ovs-vsctl、nft、bpftool、ethtool、 ip netns)、Kubernetes 検査ヘルパー —— バイナリが既に存在し、シェル アウトが Go で書き直すよりよい場合。
manager 側 BaseTool
最大の集団。 internal/manager/biz/aiops/tools/ 下に *_basetool.go ファイルとして居ます。各々は宣言的な ParamSchema が表現できない形(配列、ネストオブジェクト、oneOf)のため自前の手書き JSON Schema を持ちます。
抜粋した BaseTool:
| ツール | 何をするか |
|---|---|
bash | 対象 edge 上のシェル(ゲートあり、記録あり) |
query_promql、query_logql、query_traceql | 3 つの可観測性バックエンド |
query_incidents、get_incident_detail、query_alert_rules | アラート表面 |
query_edges、query_change_events | インベントリ + 監査 |
correlate_incident | prom + log + trace への合成ファンアウト |
expand_topology、find_topology_node、get_topology | グラフ |
query_knowledge | RAG |
find_outlier_edges、rank_edges | マルチホスト比較 |
host_load、host_processes、host_files | ホスト状態バッチツール |
get_edge_summary | ワンショットの edge ヘルススナップショット |
restart_service | edge restart スキルの manager 側ラッパー |
send_message | coordinator → specialist エージェント通信 |
task_stop、agent_tool | worker ライフサイクル |
合計でおよそ 30+。完全なリストは cmd/ongrid/main.go の BuildBaseTools で登録されているものです。
インベントリブリッジ
ブリッジ以前は 2 つの並行レジストリが存在しました:
- スキルレジストリ ——
ScopeHostGo builtin + サブプロセスパック。 SPA の/skillsページに監査 + クラスゲート付きで表面化。 - BaseTool bag —— 手書き manager 側ツール。LLM には表面化するが
/skillsにはしない。
operator はソースを読まずにエージェントが実際にどんなクラウド側能力を 持っているかを見ることができませんでした。 inventory_bridge.go は BaseTool bag を walk し、すべてのツールを Scope=ScopeManager で スキルとして登録します。opt-in の RawSchemaProvider インターフェイスで 各 BaseTool の手書き JSON Schema を逐語保持します。
2026-05-08 のメモによれば、18 の BaseTool がこのパス経由でブリッジされ ます —— /skills ページは現在、edge vs manager を示すスコープ チップ付きですべてのクラウド側能力を列挙します。
逆方向のブリッジも配線されています: skill_bridge.go は安全な各スキルを LLM 向け Tool として登録します。LLM は ScopeHost スキルには edge_id パラメータが自動付与された関数呼び出しツールとして スキルを見ます。
監査
すべてのツール発動は chat_tool_calls に行を書きます:
session_id—— 呼び出した chatruntime セッション。tool_name、args_json、result_json、error。device_id—— ツールが特定のホストを対象としたとき(ExecuteResultのEdgeIDフィールド)。started_at、finished_at、duration_ms。caller_user_id+caller_role—— LLM 起源の呼び出しでは、フレーム ワークはUserID=0/Role="system"を使う。
HLD-010 の監査ログは同じテーブルに乗っかります。admin の /admin/audit ページがタイムライン + ツールごとフィルター付きで描画します。