Communityライティング&編集github.com

saidake/code-trace-tree-jetbrains

Code Trace Tree は、AIエージェントが入れ子になったコードワークフローをトレースポイントとして構築できるVS Code/JetBrainsプラグインです。エディターメニューまたはエージェントスキルからトレースを追加し、ダブルクリックでソースにジャンプできます。

code-trace-tree-jetbrains とは?

Code Trace Tree は、AIエージェント(Claude Code、Cursor、GitHub Copilot、Codex、Gemini CLIなど)向けのスキルで、コードのワークフローを入れ子構造のトレースポイントツリーとして可視化・管理できます。開発者はIDEプラグインと連携し、エディタ上の行やファイルにコンテキスト情報を付与したトレースを追加・検索・移動・削除・再バインドできます。このスキルは、エージェントがプロジェクトのソースコードを解析し、関数呼び出しの流れや処理の依存関係をツリー状に記録するのに役立ちます。ユーザーが明示的に要求した場合のみトレースの作成や同期を行い、自動的な同期や既存トレースの削除は行わない設計になっています。Pythonスクリプトを介してストレージ(XML)を操作し、変更後はIDEにリフレッシュシグナルを送信してプラグインのビューを更新します。

対応✓Claude Code✓Codex CLI✓Cursor✓Gemini CLI
npx skills add saidake/code-trace-tree-jetbrains

Installed? Explore more ライティング&編集 skills: steipete/notion, langchain-ai/langchain, bytedance/podcast-generation · View all 6 →

お気に入りのAIに質問する

このエージェントスキルを事前に読み込んだ状態で新しいチャットを開きます。

ドキュメント

Code Trace Tree

コードワークフローを、行、ファイル、ディレクトリのトレースポイントからなる入れ子ツリーとして構築・表示します。提供されるPythonスクリプトを使用して、Code Trace Tree IDEプラグインが使用するハイブリッドストレージを操作し、その後IDEにリロードを依頼してください。

ユーザーが明示的に要求した場合のみトレースの編集または同期を行ってください(例:トピック関連ノードの生成、行へのヒント追加、編集後の再バインド)。ターンごとに自動同期しないでください。ユーザーが明示的に削除を要求しない限り、既存のトレースポイント(rebindが"invalid"として報告するものを含む)をdeleteしないでください。

このスキルの使い方

この SKILL.md のみを読んでください。このスキルの scripts/ や references/ フォルダを一覧表示、検索、探索したり、APIを学ぶためにスクリプトソースを開いたりしないでください。文書化されたPythonコマンドは絶対パスで呼び出してください。

スキルの使用中に重大な問題が発生した場合のみ(スクリプトが欠落している、クラッシュする、ストレージが破損している、またはこのファイルでカバーされていないエラー)、scripts/ または references/ を開いてください。

スキルスクリプトの場所

ヘルパースクリプトは <Agent Skill Path>/code-trace-tree/scripts/ にあります。

Agent Skill Path は、実行中のエージェントのスキルディレクトリ(code-trace-tree/ の親ディレクトリ)です。プロジェクトローカルに存在する場合はそちら、そうでなければグローバルディレクトリを使用します。パスは skills で終わり、code-trace-tree では終わりません。パスは npx skills と一致します。表に一般的な例を示します。他の記載されたエージェントも同様に動作します。

エージェント(例)グローバルエージェントスキルパスプロジェクトローカルエージェントスキルパス
Claude Code~/.claude/skills<repo>/.claude/skills
Cursor~/.cursor/skills<repo>/.agents/skills
GitHub Copilot~/.copilot/skills<repo>/.agents/skills
Codex~/.codex/skills<repo>/.agents/skills
Gemini CLI~/.gemini/skills<repo>/.agents/skills

Windowsでは、~ は %USERPROFILE% です。Agent Skill Path はセッションごとに1度だけ解決してください。スクリプトは python(またはPATH上のものに応じて python3)を使用して絶対パスで呼び出してください。プロセスCWDをIDEプロジェクト内に維持してください(スキルフォルダに cd しないでください)。直接の呼び出し方法については、トレースツリー操作を参照してください。PowerShellについては、Windows PowerShellも参照してください。

トレースツリー操作

すべてのスキルスクリプト呼び出し。このエージェントの絶対的なAgent Skill Pathに置き換えてください。プロセスCWDをIDEプロジェクト内に維持してください(スキルフォルダに cd しないでください)。PowerShellについては、Windows PowerShellを参照してください。

resolve_storage.py

プロジェクトIDとバインドされたグローバルXMLを解決します。ストレージが存在しない場合は作成します(ケースC)。.idea/code-trace-tree.project.id が存在するがXMLがなくなっている場合は、同じprojectIdでXMLを再作成します。.idea のIDファイルは作成/上書きしません。create_tree および trace_tree の add / ensure / move / delete / rebind は、ストレージも自動的に作成します。trace_tree search は自動的に作成しません。

使用法

python "<Agent Skill Path>/code-trace-tree/scripts/resolve_storage.py" [project_path]

オプションパラメータ:

  • [project_path]: IDEプロジェクトルートを検出するために使用するパス(デフォルト: CWD)。プロジェクトルートを渡して、XMLの <path> が正しくなるようにします。

戻り値

標準出力はJSON(indent=2、UTF-8)です。エラーは ERROR: … として標準エラー出力に出力されます。

{
  "created": false,
  "project_root": "<abs>",
  "global_dir": "<OS Config Dir>/code-trace-tree",
  "project_id": "<uuid or null>",
  "storage_xml": "<abs xml path>"
}

新しいXMLが書き込まれた場合、created は true です。成功時は終了コード 0、プロジェクトルートが見つからない場合は 1 を返します。

例:

python "<Agent Skill Path>/code-trace-tree/scripts/resolve_storage.py"
python "<Agent Skill Path>/code-trace-tree/scripts/resolve_storage.py" /path/to/project

create_tree.py

1回の呼び出しで、入れ子になったトレースポイントツリーを作成します。ペイロードのルートのみを保証します(および既に存在するルートの子ノード)。ノードが作成されると、その子孫は保証なしで追加されます。必要でない場合は search を使用しないでください — このスクリプトは既存のノードを既に保証しています。IDが必要な場合(選択/移動/削除)または検査する場合に search を使用してください。LINEロケーターは trace_tree.py と同じです(file + line + content)。行コンテンツの出現情報(occurrenceIndex / totalOccurrences)は無視してください — スクリプトが計算します。PowerShellでは、--tree-file を推奨します。

オプションの --parent-id は、ペイロードを既存のノードの下にアタッチします(その親は解決され、保証されません)。

使用法

python "<Agent Skill Path>/code-trace-tree/scripts/create_tree.py" --tree-file tree.json
python "<Agent Skill Path>/code-trace-tree/scripts/create_tree.py" tree.json
python "<Agent Skill Path>/code-trace-tree/scripts/create_tree.py" --tree '<json>'

必須パラメータ(正確に1つのツリーソース):

  • --tree-file <path>: JSONファイル(- は標準入力)。--tree よりもこちらを推奨します。
  • --tree <json>: JSON文字列。
  • 位置引数 <path>: --tree-file と同じ。

パラメータ(共通。すべてオプション):

  • --project <path>: プロジェクトパス(デフォルト: CWD)。
  • --profile <name>: プロファイル名のオーバーライド(デフォルト: <activeProfileName>)。
  • --dry-run: XMLの書き込みやリフレッシュを行いません。
  • --no-refresh: IDEリフレッシュシグナルをスキップします。
  • --parent-id <uuid>: 既存の親。ルート方向に繰り返して直近の親にします。プロファイルルートの場合は省略します。
  • --parent <json>: 既存の親パスJSON(--parent-id と組み合わせないでください)。

ツリーJSON(1つのノードオブジェクト、またはノードオブジェクトの配列)。すべてのノードは同じ形状を使用し、children を含みます(description はすべてのノードにあり、ルートのみではありません):

{
  "file": "src/A.java",
  "line": 10,
  "content": "void methodA() {",
  "name": "methodA",
  "description": "",
  "type": "LINE",
  "children": [
    {
      "file": "src/B.java",
      "line": 40,
      "content": "void methodB() {",
      "name": "methodB",
      "description": "",
      "type": "LINE",
      "children": [
        {
          "file": "src/C.java",
          "line": 20,
          "content": "void methodC() {",
          "name": "methodC",
          "description": "",
          "type": "LINE"
        },
        {
          "type": "FILE",
          "file": "src/Util.java",
          "name": "Util",
          "description": ""
        }
      ]
    }
  ]
}

フィールド(すべてのノード、子ノードも含む): file(必須); type(LINE | FILE | DIRECTORY; 省略した場合は推論: line/content → LINE、それ以外はディスク上のパス); LINEは line + content が必要; name / description / children はオプション。occurrenceIndex / totalOccurrences は含めないでください。children は同じオブジェクトの配列です。

戻り値

標準出力はJSON(indent=2、UTF-8)です。ノードの skipped: true は、ensureがそのノードを見つけたことを意味します。そのノードの子ノードは引き続き保証されます。created: true は追加を意味します。そのノードの子孫は、保証なしで追加されました。

{
  "action": "create_tree",
  "profile": "<profile-name>",
  "storage_xml": "<abs>",
  "parentId": "<uuid or empty>",
  "created": 3,
  "skipped": 1,
  "ids": ["<uuid>", …],
  "roots": [ { "skipped": false, "created": true, "node": <node-object>, "children": [ … ] } ],
  "refreshed": true
}

成功時は終了コード 0。

例:

python "<Agent Skill Path>/code-trace-tree/scripts/create_tree.py" --tree-file tree.json
python "<Agent Skill Path>/code-trace-tree/scripts/create_tree.py" --parent-id "$PARENT_ID" --tree-file tree.json

trace_tree.py

ノードの検索、追加、保証、移動、削除、再バインドを行います。行コンテンツの出現情報(occurrenceIndex / totalOccurrences)は無視してください — これらのフィールドは絶対に渡さないでください。スクリプトが計算します。

使用法

python "<Agent Skill Path>/code-trace-tree/scripts/trace_tree.py" <subcommand> [flags…]
python "<Agent Skill Path>/code-trace-tree/scripts/trace_tree.py" [shared-flags] <subcommand> [flags…]

共有フラグ(--project、--profile、--dry-run、--no-refresh)は、サブコマンドの前または後に配置できます。CWDが既にIDEプロジェクト内にある場合は、--project を省略してください(スクリプトは .vscode / .idea / .git などの一般的なプロジェクトマーカーを見つけるために上位ディレクトリを探索します)。デフォルトのプロファイルは <activeProfileName> です。

LINEロケーター: 保存されるヒントは [file, line, full-trimmed-line] です。--line は必須です。スクリプトはその行のトリミングされたテキストをチェックし、完全なトリミングされた行を保存し(サブストリング --content は展開されます)、ファイルをスキャンして occurrenceIndex / totalOccurrences を設定します。1つのファイル内でトリミングされた行が重複している場合、--line がどのコピーを選択するかを決定するため、それらは区別されます。出現情報を無視: occurrenceIndex / totalOccurrences を読み取ったり、渡したり、計算したりしないでください。PowerShellでは、引用符で囲まれた --content を --% (Windows PowerShellを参照)で保護するか、サブストリングのヒントと --line を使用してください。$Args という名前のパラメータを使用するヘルパーでCLIをラップしないでください。

ヒント結果
正確な行 + 完全なトリミングされたテキストそのまま使用
その行の特徴的なサブストリング(例:.handleEmailTriggerRequest()--line が必要。完全なトリミングされた行を保存
同じトリミングされたテキストが2行以上ある場合目的のコピーに --line を渡す。スクリプトが出現情報を設定
複数行の呼び出し最も特徴的な物理行を優先(多くの場合 .methodName( の継続行)

add vs ensure: add は常に新しいUUIDを作成します(IDEプラグインと同じ)。同じ行に別のラベルまたは親を持つ2番目のノードを作成する場合に使用します。ensure は取得または作成です:同一の識別情報 → "skipped": true(終了コード 0)。LINEの場合、識別情報はファイル + トリミングされた lineContent + --line で選択されたコピーです(スクリプトが出現情報を保存します。渡さないでください)。FILE/DIRECTORYの識別情報はパス + タイプです。--trace-name、description、親は識別情報ではありません。

ツリーの生成: create_tree.py を優先してください。必要でない場合は search を使用しないでください — スクリプトは既存のノードを保証し、新しいサブツリーを追加します。選択/移動/削除のためにIDが必要な場合、または検査する場合に search を使用してください。単一ノードの場合は、ensure(取得または作成。検索不要)または add(常に新しいUUID)を使用してください。

親パス: ルート方向の祖先から直近の親へ、繰り返し --parent-id を使用することを推奨します。add / ensure でルートの場合は省略します。--parent-id と --parent を組み合わせないでください。--parent JSON 内のベア文字列は UUIDのみであり、traceName ラベルではありません。

--parent 形式例
ルート--parent [](move でルートに移動する場合に必要。add / ensure のデフォルトはルート)
JSONでのノードID--parent '["3d41c2d1-…"]'
[file, line, content]--parent '[["src/A.java",10,"void methodA() {"]]'
method A def
  method B call
    method C call   ← --parent-id idA --parent-id idB で add(またはBが既に存在する場合はensure)

ディスク編集後の再バインド: エージェントはIDEエディタを介して編集しないため、ライブラインのシフトは適用されません。プロジェクトのソースを変更したターンの後は、ロケーターや選択/ナビゲーションに依存する前に rebind を実行してください(オプションで、影響を受けたパスに --file を指定)。Rebindは、トリミングされた lineContent から lineNumber を修復し、出現情報を再計算します。"invalid" 配列は、それらのLINEロケーターが見つからなかったことを意味します。これらのノードはツリーに残し、ユーザーが削除を要求しない限り delete しないでください。

多数の変更呼び出しがある場合は、各呼び出しで --no-refresh を使用し、最後に1回 request_refresh.py を呼び出してください。

必須サブコマンド:

  • <subcommand>: search | add | ensure | move | delete | rebind

パラメータ(共通。すべてオプション):

  • --project <path>: プロジェクトパス(デフォルト: CWD)。
  • --profile <name>: プロファイル名のオーバーライド(デフォルト: <activeProfileName>)。
  • --dry-run: XMLの書き込みやリフレッシュを行いません。
  • --no-refresh: IDEリフレッシュシグナルをスキップします。

パラメータ(search。すべてオプション):

  • --id <uuid>: ノードUUID。
  • --file <path>: 相対ファイル/ディレクトリパス。
  • --line <n>: 1から始まる行番号。
  • --content <text>: lineContent に対する部分文字列一致。
  • --trace-name <text>: traceName に対する部分文字列一致。
  • --type <LINE|FILE|DIRECTORY>: タイプでフィルタリング。

パラメータ(add / ensure):

  • ロケーター(必須): LINEの場合は --file + --line + --content(その行の部分文字列でも可)。FILE/DIRECTORYの場合は --file。または位置引数 FILE LINE CONTENT、またはパス。
  • --parent-id <uuid>(オプション): 親ノードUUID。ルート方向に繰り返して直近の親にします(推奨)。ルートの場合は省略します。
  • --parent <json>(オプション): JSON親パス(--parent-id と組み合わせないでください)。
  • --trace-name <text>(オプション): トレースポイントのラベル。
  • --description <text>(オプション): 説明。
  • --type <LINE|FILE|DIRECTORY>(オプション): タイプのオーバーライド(デフォルト: LINE)。

パラメータ(move):

  • ロケーター(必須): --id、または --file + --line + --content、または FILE/DIRECTORY の場合は --file のみ。
  • 新しい親(必須): --parent-id(ルート方向に繰り返して直近の親にします)または --parent JSON。ルートの場合は --parent [] を使用します。--parent-id と --parent を組み合わせないでください。

パラメータ(delete):

  • ロケーター(必須): --id、または --file + --line + --content、または FILE/DIRECTORY の場合は --file のみ。

パラメータ(rebind。すべてオプション):

  • --file <path>: 相対パスに制限。繰り返し可能。デフォルト: プロファイル内のすべてのLINEノード。

戻り値

標準出力はJSON(indent=2、UTF-8)です。エラーは ERROR: … として標準エラー出力に出力され、ゼロ以外の終了コードで終了します。

node-object:

{
  "id": "<uuid>",
  "parentId": "<uuid or empty>",
  "type": "LINE|FILE|DIRECTORY",
  "file": "<relative path>",
  "line": "<n or empty>",
  "content": "<trimmed lineContent>",
  "name": "<traceName>",
  "depth": 0,
  "childCount": 0
}

search:

{
  "project_root": "<abs>",
  "storage_xml": "<abs>",
  "profile": "<profile-name>",
  "matches": [ <node-object>, … ]
}

add(常に作成されます。"skipped" はありません)

...

関連スキル