# AI Agent







## Claude Code

```kt collapse
// ProjectArchitecture.kt
@file:OptIn(ExperimentalKatachiApi::class)

import me.tbsten.katachi.ExperimentalKatachiApi
import me.tbsten.katachi.dsl.architecture

val projectArchitecture = architecture {
    "AiAgent".group {
        claudeCode()
    }
}

// roles/ClaudeCode.kt
@file:OptIn(ExperimentalKatachiApi::class)

import me.tbsten.katachi.ExperimentalKatachiApi
import me.tbsten.katachi.dsl.DeclarationContainerScope

fun DeclarationContainerScope.claudeCode() =
    "ClaudeCode".group {
        "Rules" {
            summary = "Claude Code に読ませる指示ファイル"

            layout {
                "**/CLAUDE.md".file()
                "**/AGENTS.md".file()
                ".claude/rules/**/*.md".file()
            }
        }

        "Skills" {
            summary = "Claude Code のスキル"

            layout {
                ".claude/skills/**/*".file()
            }
        }

        "Agents" {
            summary = "Claude Code のサブエージェント定義"

            layout {
                ".claude/agents/**/*.md".file()
            }
        }

        "Commands" {
            summary = "Claude Code のスラッシュコマンド"

            layout {
                ".claude/commands/**/*.md".file()
            }
        }

        "OutputStyles" {
            summary = "Claude Code の出力スタイル"

            layout {
                ".claude/output-styles/*.md".file()
            }
        }

        "Hooks" {
            summary = "Claude Code のフックスクリプト"

            layout {
                ".claude/hooks/**/*".file()
            }
        }

        "Settings" {
            summary = "Claude Code の設定ファイル"

            layout {
                ".claude/settings.json".file().optional()
            }
        }

        "Mcp" {
            summary = "Claude Code の MCP サーバー設定"

            layout {
                ".mcp.json".file().optional()
            }
        }
    }
```

## Cursor

```kt collapse
// ProjectArchitecture.kt
@file:OptIn(ExperimentalKatachiApi::class)

import me.tbsten.katachi.ExperimentalKatachiApi
import me.tbsten.katachi.dsl.architecture

val projectArchitecture = architecture {
    "AiAgent".group {
        cursor()
    }
}

// roles/Cursor.kt
@file:OptIn(ExperimentalKatachiApi::class)

import me.tbsten.katachi.ExperimentalKatachiApi
import me.tbsten.katachi.dsl.DeclarationContainerScope

fun DeclarationContainerScope.cursor() =
    "Cursor".group {
        "Rules" {
            summary = "Cursor に読ませる指示ファイル"

            layout {
                ".cursor/rules/**/*.mdc".file()
                "**/AGENTS.md".file()
            }
        }

        "Skills" {
            summary = "Cursor のスキル"

            layout {
                ".cursor/skills/**/*".file()
            }
        }

        "Agents" {
            summary = "Cursor のサブエージェント定義"

            layout {
                ".cursor/agents/*.md".file()
            }
        }

        "Commands" {
            summary = "Cursor のコマンド"

            layout {
                ".cursor/commands/*.md".file()
            }
        }

        "HookConfig" {
            summary = "Cursor のフック設定ファイル"

            layout {
                ".cursor/hooks.json".file().optional()
            }
        }

        "HookScripts" {
            summary = "Cursor のフックスクリプト"

            layout {
                ".cursor/hooks/*.sh".file()
            }
        }

        "Mcp" {
            summary = "Cursor の MCP サーバー設定"

            layout {
                ".cursor/mcp.json".file().optional()
            }
        }

        "Environment" {
            summary = "Cursor の実行環境の設定"

            layout {
                ".cursor/environment.json".file().optional()
            }
        }

        "Ignore" {
            summary = "Cursor に読ませないファイルの指定"

            layout {
                ".cursorignore".file().optional()
                ".cursorindexingignore".file().optional()
            }
        }
    }
```

## Windsurf (Devin Desktop)

```kt collapse
// ProjectArchitecture.kt
@file:OptIn(ExperimentalKatachiApi::class)

import me.tbsten.katachi.ExperimentalKatachiApi
import me.tbsten.katachi.dsl.architecture

val projectArchitecture = architecture {
    "AiAgent".group {
        windsurf()
    }
}

// roles/Windsurf.kt
@file:OptIn(ExperimentalKatachiApi::class)

import me.tbsten.katachi.ExperimentalKatachiApi
import me.tbsten.katachi.dsl.DeclarationContainerScope

fun DeclarationContainerScope.windsurf() =
    "Windsurf".group {
        "Rules" {
            summary = "Windsurf に読ませる指示ファイル"

            layout {
                ".devin/rules/*.md".file()
                "**/AGENTS.md".file()
            }
        }

        "Skills" {
            summary = "Windsurf のスキル"

            layout {
                ".devin/skills/**/*".file()
            }
        }

        "Workflows" {
            summary = "Windsurf のワークフロー"

            layout {
                ".devin/workflows/*.md".file()
            }
        }

        "Hooks" {
            summary = "Windsurf のフック設定ファイル"

            layout {
                ".devin/hooks.json".file().optional()
            }
        }

        "Ignore" {
            summary = "Windsurf に読ませないファイルの指定"

            layout {
                ".devinignore".file().optional()
            }
        }

        "LegacyRules" {
            summary = "旧形式の Windsurf の指示ファイル"

            layout {
                ".windsurfrules".file().optional()
                ".windsurf/rules/*.md".file()
            }
        }

        "LegacySkills" {
            summary = "旧形式の Windsurf のスキル"

            layout {
                ".windsurf/skills/**/*".file()
            }
        }

        "LegacyWorkflows" {
            summary = "旧形式の Windsurf のワークフロー"

            layout {
                ".windsurf/workflows/*.md".file()
            }
        }
    }
```

## GitHub Copilot

```kt collapse
// ProjectArchitecture.kt
@file:OptIn(ExperimentalKatachiApi::class)

import me.tbsten.katachi.ExperimentalKatachiApi
import me.tbsten.katachi.dsl.architecture

val projectArchitecture = architecture {
    "AiAgent".group {
        githubCopilot()
    }
}

// roles/GitHubCopilot.kt
@file:OptIn(ExperimentalKatachiApi::class)

import me.tbsten.katachi.ExperimentalKatachiApi
import me.tbsten.katachi.dsl.DeclarationContainerScope

fun DeclarationContainerScope.githubCopilot() =
    "GitHubCopilot".group {
        "Instructions" {
            summary = "GitHub Copilot に読ませる指示ファイル"

            layout {
                ".github/copilot-instructions.md".file().optional()
                ".github/instructions/**/*.instructions.md".file()
                "**/AGENTS.md".file()
            }
        }

        "Skills" {
            summary = "GitHub Copilot のスキル"

            layout {
                ".github/skills/**/*".file()
            }
        }

        "Agents" {
            summary = "GitHub Copilot のカスタムエージェント定義"

            layout {
                ".github/agents/*.agent.md".file()
            }
        }

        "Prompts" {
            summary = "GitHub Copilot のプロンプトファイル"

            layout {
                ".github/prompts/*.prompt.md".file()
            }
        }

        "Hooks" {
            summary = "GitHub Copilot のフック設定ファイル"

            layout {
                ".github/hooks/*.json".file()
            }
        }

        "Mcp" {
            summary = "GitHub Copilot の MCP サーバー設定"

            layout {
                ".vscode/mcp.json".file().optional()
            }
        }

        "SetupSteps" {
            summary = "GitHub Copilot の実行環境を用意する workflow"

            layout {
                // GitHub のレシピの Workflow（.github/workflows/*.yml）とも重なる
                ".github/workflows/copilot-setup-steps.yml".file().optional()
            }
        }
    }
```

## Cline

```kt collapse
// ProjectArchitecture.kt
@file:OptIn(ExperimentalKatachiApi::class)

import me.tbsten.katachi.ExperimentalKatachiApi
import me.tbsten.katachi.dsl.architecture

val projectArchitecture = architecture {
    "AiAgent".group {
        cline()
    }
}

// roles/Cline.kt
@file:OptIn(ExperimentalKatachiApi::class)

import me.tbsten.katachi.ExperimentalKatachiApi
import me.tbsten.katachi.dsl.DeclarationContainerScope

fun DeclarationContainerScope.cline() =
    "Cline".group {
        "Rules" {
            summary = "Cline に読ませる指示ファイル"

            layout {
                ".clinerules/**/*.md".file()
                ".cline/rules/**/*.md".file()
                "AGENTS.md".file().optional()
            }
        }

        "Skills" {
            summary = "Cline のスキル"

            layout {
                ".cline/skills/**/*".file()
            }
        }

        "Agents" {
            summary = "Cline のエージェント定義"

            layout {
                ".cline/agents.yaml".file().optional()
            }
        }

        "Hooks" {
            summary = "Cline のフックスクリプト"

            layout {
                ".cline/hooks/**/*".file()
            }
        }

        "Ignore" {
            summary = "Cline に読ませないファイルの指定"

            layout {
                ".clineignore".file().optional()
            }
        }
    }
```

## JetBrains Junie

```kt collapse
// ProjectArchitecture.kt
@file:OptIn(ExperimentalKatachiApi::class)

import me.tbsten.katachi.ExperimentalKatachiApi
import me.tbsten.katachi.dsl.architecture

val projectArchitecture = architecture {
    "AiAgent".group {
        junie()
    }
}

// roles/Junie.kt
@file:OptIn(ExperimentalKatachiApi::class)

import me.tbsten.katachi.ExperimentalKatachiApi
import me.tbsten.katachi.dsl.DeclarationContainerScope

fun DeclarationContainerScope.junie() =
    "Junie".group {
        "Rules" {
            summary = "Junie に読ませる指示ファイル"

            layout {
                ".junie/rules/*.md".file()
                ".junie/playbook.md".file().optional()
                ".junie/guidelines.md".file().optional()
                "**/AGENTS.md".file()
            }
        }

        "Skills" {
            summary = "Junie のスキル"

            layout {
                ".junie/skills/**/*".file()
            }
        }

        "Commands" {
            summary = "Junie のコマンド"

            layout {
                ".junie/commands/*.md".file()
            }
        }

        "Mcp" {
            summary = "Junie の MCP サーバー設定"

            layout {
                ".junie/mcp/mcp.json".file().optional()
            }
        }

        "Config" {
            summary = "Junie の設定ファイル"

            layout {
                ".junie/config.json".file().optional()
            }
        }

        "Ignore" {
            summary = "Junie に読ませないファイルの指定"

            layout {
                ".aiignore".file().optional()
            }
        }
    }
```

## OpenAI Codex

```kt collapse
// ProjectArchitecture.kt
@file:OptIn(ExperimentalKatachiApi::class)

import me.tbsten.katachi.ExperimentalKatachiApi
import me.tbsten.katachi.dsl.architecture

val projectArchitecture = architecture {
    "AiAgent".group {
        codex()
    }
}

// roles/Codex.kt
@file:OptIn(ExperimentalKatachiApi::class)

import me.tbsten.katachi.ExperimentalKatachiApi
import me.tbsten.katachi.dsl.DeclarationContainerScope

fun DeclarationContainerScope.codex() =
    "Codex".group {
        "Rules" {
            summary = "Codex に読ませる指示ファイル"

            layout {
                "**/AGENTS.md".file()
            }
        }

        "Skills" {
            summary = "Codex のスキル"

            layout {
                ".agents/skills/**/*".file()
            }
        }

        "Config" {
            summary = "Codex の設定ファイル"

            layout {
                ".codex/config.toml".file().optional()
            }
        }

        "Hooks" {
            summary = "Codex のフック設定ファイル"

            layout {
                ".codex/hooks.json".file().optional()
            }
        }

        "SandboxRules" {
            summary = "Codex がコマンドを実行してよいかを決めるルール"

            layout {
                ".codex/rules/*.rules".file()
            }
        }
    }
```

## Google Antigravity

```kt collapse
// ProjectArchitecture.kt
@file:OptIn(ExperimentalKatachiApi::class)

import me.tbsten.katachi.ExperimentalKatachiApi
import me.tbsten.katachi.dsl.architecture

val projectArchitecture = architecture {
    "AiAgent".group {
        antigravity()
    }
}

// roles/Antigravity.kt
@file:OptIn(ExperimentalKatachiApi::class)

import me.tbsten.katachi.ExperimentalKatachiApi
import me.tbsten.katachi.dsl.DeclarationContainerScope

fun DeclarationContainerScope.antigravity() =
    "Antigravity".group {
        "Rules" {
            summary = "Antigravity に読ませる指示ファイル"

            layout {
                "**/AGENTS.md".file()
                "GEMINI.md".file().optional()
                ".agents/rules/**/*.md".file()
            }
        }

        "Skills" {
            summary = "Antigravity のスキル"

            layout {
                ".agents/skills/**/*".file()
            }
        }

        "Agents" {
            summary = "Antigravity のエージェント定義"

            layout {
                ".agents/agents/**/*.md".file()
            }
        }

        "Mcp" {
            summary = "Antigravity の MCP サーバー設定"

            layout {
                ".agents/mcp_config.json".file().optional()
            }
        }

        "Hooks" {
            summary = "Antigravity のフック設定ファイル"

            layout {
                ".agents/hooks.json".file().optional()
            }
        }
    }
```

## Aider

```kt collapse
// ProjectArchitecture.kt
@file:OptIn(ExperimentalKatachiApi::class)

import me.tbsten.katachi.ExperimentalKatachiApi
import me.tbsten.katachi.dsl.architecture

val projectArchitecture = architecture {
    "AiAgent".group {
        aider()
    }
}

// roles/Aider.kt
@file:OptIn(ExperimentalKatachiApi::class)

import me.tbsten.katachi.ExperimentalKatachiApi
import me.tbsten.katachi.dsl.DeclarationContainerScope

fun DeclarationContainerScope.aider() =
    "Aider".group {
        "Conventions" {
            summary = "Aider に読ませる規約ファイル"

            layout {
                "CONVENTIONS.md".file().optional()
            }
        }

        "Settings" {
            summary = "Aider の設定ファイル"

            layout {
                ".aider.conf.yml".file().optional()
                ".aider.model.settings.yml".file().optional()
            }
        }

        "Ignore" {
            summary = "Aider に読ませないファイルの指定"

            layout {
                ".aiderignore".file().optional()
            }
        }
    }
```

<SnippetIsStartingPoint />