/model opusplan
プランモードの時だけ Opus を使ってくれる
settings.json
"sandbox": {
"enabled": true,
"allowUnsandboxedCommands": false
},
settings.json
"plansDirectory": "./plans",
claude —permission-mode auto
.bash_profile や .zsh に aliasを登録しておくと良いです。
settings.json
defaultMode: "auto"
"env": {
"CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS": "1",
"ENABLE_TOOL_SEARCH": "true"
}
https://www.aihero.dev/my-grill-me-skill-has-gone-viral
.claude/skills/grill-me/SKILL.md
---
name: grill-me
description: Interview the user relentlessly about a plan or design until reaching shared understanding, resolving each branch of the decision tree. Use when user wants to stress-test a plan, get grilled on their design, or mentions "grill me".
---
Interview me relentlessly about every aspect of this plan until
we reach a shared understanding. Walk down each branch of the design
tree resolving dependencies between decisions one by one.
If a question can be answered by exploring the codebase, explore
the codebase instead.
For each question, provide your recommended answer.
日本語翻訳版
.claude/skills/grill-me/SKILL.md
---
name: grill-me
description: 計画や設計についてユーザーを徹底的にインタビューし、意思決定ツリーの各分岐を解決しながら相互理解に達する。ユーザーが計画のストレステストや設計のレビューを望む場合、または「grill me」と言及した場合に使用する。
---
この計画のあらゆる側面について、相互理解に達するまで容赦なくインタビューしてください。
設計ツリーの各分岐を順に辿り、決定間の依存関係を一つずつ解決してください。
質問がコードベースを調べることで答えられる場合は、
コードベースを調べてください。
各質問には、推奨する回答を提示してください
例えば CLAUDE.mdからAGENTS.mdへシンボリックリンクを貼っておくだけで良いです。
あるいは、以下のようにしてもOKです。
CLAUDE.md
@AGENTS.md
| AIエージェント | 読み取り優先順・挙動 |
|---|---|
| Claude Code (Anthropic) | CLAUDE.md を優先、存在しなければ AGENTS.md も自動読み込み(2025年9月以降) |
| Cursor | AGENTS.md を優先、CLAUDE.md も同時検出・合併読み込み |
| Zed | 両方読み込み、衝突時は CLAUDE.md が優先 |
| VS Code (AI拡張機能含む) | 両方読み込み可能 |
| AIエージェント | 代替・独自ファイル |
|---|---|
| OpenAI Codex CLI | — |
| GitHub Copilot (Coding Agent / Custom Agent) | .github/copilot-instructions.md も読めるが CLAUDE.md は無視 |
| Google Gemini CLI / Jules | GEMINI.md も読めるが CLAUDE.md は無視 |
| Devin (Cognition) | — |
| Aider | — |
| RooCode | — |
| Factory | — |
| Amp | — |
| ON A | — |
| Phoenix | — |
| Semgrep | — |
| Wrap | — |
| opencode | — |
| Warp | — |
AGENTS.mdに記述する項目のサンプル
# CLAUDE.md このファイルはClaude Code がこのリポジトリで作業する際のガイドラインです。 --- ## プロジェクト概要 | 項目 | 内容 | |------|------| | 構成 | モノレポ | | フロントエンド | Next.js(App Router)+ TypeScript | | バックエンド | Laravel(REST API)+ 管理画面 | | パッケージマネージャー(FE) | pnpm | --- ## Claudeへの指示 - 安易なフォールバックや回避策は実装しないこと - うまくいかないときは作業を中断し、必ずユーザーに質問すること - 応答は日本語で行うこと --- ## Git規約 ### コミットメッセージ [Conventional Commits](https://www.conventionalcommits.org/) に従うこと。 ```( ): type: feat 新機能 fix バグ修正 docs ドキュメントのみの変更 style コードの意味に影響しない変更(空白、フォーマット等) refactor リファクタリング test テストの追加・修正 chore ビルドプロセスや補助ツールの変更 ``` 例: ``` feat(auth): ログイン機能を追加 fix(api): ユーザー取得時のNullPointerExceptionを修正 ``` --- ## フロントエンド(Next.js) ### 基本方針 - App Router を使用する - 必ず TypeScript を使用する - 型定義は `interface` より `type` を使用する - Reactの宣言的UIに沿った実装とする - 単一責任の原則に則って関数を分ける - 可読性を意識し、できるだけ宣言的に記述する - 凝集度に注意し、低凝集(疎結合)なコーディングを心がける ### Server / Client Components の境界 - `page.tsx` はサーバーコンポーネントとする - `page.tsx` から呼び出すコンポーネントは必ず `features/` 配下に置く - `features/` 配下のコンポーネントをクライアントコンポーネントとし、`"use client"` を宣言する ``` app/ example/ page.tsx ← Server Component("use client"なし) ↓ import features/ example/ ExamplePage.tsx ← Client Component("use client"あり) ``` ### ディレクトリ構成 ``` src/ app/ # Next.js App Router(page.tsx / layout.tsx等) common/ types/ # 共通型定義 components/ ui/ # 汎用UIコンポーネント(ボタン、モーダル等) features/ # 機能単位のクライアントコンポーネント ``` ※ 上記以外のディレクトリ(`hooks/`、`libs/`等)は必要に応じて適宜追加する。 ### Linter / Formatter - **oxlint**、**oxfmt** を使用する - コード生成後は必ずlint・formatが通ることを確認すること ### テスト - **Jest + Testing Library** を使用する --- ## バックエンド(Laravel) ### 基本方針 - APIサーバーとして実装する(コントローラー+サービス層構成) - コントローラーはリクエストの受け取りとレスポンス返却のみを担当する - ビジネスロジックはサービス層に実装する ### コードスタイル - **Laravel Pint** を使用する - コード生成後は必ずPintが通ることを確認すること ### テスト - **Pest** を使用する ---
Claude Code がコミットを作成すると、コミットメッセージの末尾に Co-Authored-By トレーラーが自動付与されます。
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
GitHub はプッシュされたコミットを解析してこのトレーラーを検出し、メールアドレスに紐づく Anthropic のアカウントをコントリビューターとして表示する。
Co-Authored-By は GitHub が公式サポートする仕様であり、ペアプログラミングや共同作業の貢献者を記録する目的で使われています。
(正直、オフにするメリットは少ないと思いますが、動作を確認したい場合は、以下のようにして確認することができます。)
~/.claude/settings.json に以下を追加する。
{
"attribution": {
"commit": "",
"pr": ""
}
}
| キー | 内容 |
|---|---|
commit | コミットメッセージへの Co-Authored-By 付与 |
pr | PR コメントへの帰属表示 |
空文字を設定するとその項目が無効になる。
| ファイル | 適用範囲 |
|---|---|
~/.claude/settings.json | 自分のマシン全プロジェクト |
.claude/settings.json | プロジェクト単位(git で共有) |
.claude/settings.local.json | プロジェクト単位(git に含めない) |
引用: https://zenn.dev/little_hand_s/articles/dbd5fc27f5a2f0
code ~/.claude/statusline.js
#!/usr/bin/env node
const fs = require('fs');
const path = require('path');
const readline = require('readline');
const { execSync } = require('child_process');
// Constants
const COMPACTION_THRESHOLD = 200000
// Read JSON from stdin
let input = '';
process.stdin.on('data', chunk => input += chunk);
process.stdin.on('end', async () => {
try {
const data = JSON.parse(input);
// Extract values
const model = data.model?.display_name || 'Unknown';
const currentDir = data.workspace?.current_dir || data.cwd || '.';
const dirName = path.basename(currentDir);
const sessionId = data.session_id;
// Get Git branch
let branch = '';
if (currentDir && fs.existsSync(path.join(currentDir, '.git'))) {
try {
const branchName = execSync('git --no-optional-locks branch --show-current 2>/dev/null', {
cwd: currentDir,
encoding: 'utf-8'
}).trim();
if (branchName) {
branch = ` 🌿 ${branchName}`;
}
} catch (e) {
// Gitコマンドエラーは無視
}
}
// Calculate token usage for current session
let totalTokens = 0;
if (sessionId) {
// Find all transcript files
const projectsDir = path.join(process.env.HOME, '.claude', 'projects');
if (fs.existsSync(projectsDir)) {
// Get all project directories
const projectDirs = fs.readdirSync(projectsDir)
.map(dir => path.join(projectsDir, dir))
.filter(dir => fs.statSync(dir).isDirectory());
// Search for the current session's transcript file
for (const projectDir of projectDirs) {
const transcriptFile = path.join(projectDir, `${sessionId}.jsonl`);
if (fs.existsSync(transcriptFile)) {
totalTokens = await calculateTokensFromTranscript(transcriptFile);
break;
}
}
}
}
// Calculate percentage
const percentage = Math.min(100, Math.round((totalTokens / COMPACTION_THRESHOLD) * 100));
// Format token display
const tokenDisplay = formatTokenCount(totalTokens);
// Color coding for percentage (same ratio as original article with 160K base)
let percentageColor = '\x1b[32m'; // Green
if (percentage >= 56) percentageColor = '\x1b[33m'; // Yellow (112K/200K)
if (percentage >= 72) percentageColor = '\x1b[91m'; // Bright Red (144K/200K)
// Build status line
const statusLine = `[${model}] 📁 ${dirName}${branch} | 🪙 ${tokenDisplay} | ${percentageColor}${percentage}%\x1b[0m \x1b[90m| ${sessionId}\x1b[0m`;
console.log(statusLine);
} catch (error) {
// Fallback status line on error
console.log('[Claude Code]');
}
});
async function calculateTokensFromTranscript(filePath) {
return new Promise((resolve, reject) => {
let lastUsage = null;
const fileStream = fs.createReadStream(filePath);
const rl = readline.createInterface({
input: fileStream,
crlfDelay: Infinity
});
rl.on('line', (line) => {
try {
const entry = JSON.parse(line);
// Check if this is an assistant message with usage data
if (entry.type === 'assistant' && entry.message?.usage) {
lastUsage = entry.message.usage;
}
} catch (e) {
// Skip invalid JSON lines
}
});
rl.on('close', () => {
if (lastUsage) {
// The last usage entry contains cumulative tokens
const totalTokens = (lastUsage.input_tokens || 0) +
(lastUsage.output_tokens || 0) +
(lastUsage.cache_creation_input_tokens || 0) +
(lastUsage.cache_read_input_tokens || 0);
resolve(totalTokens);
} else {
resolve(0);
}
});
rl.on('error', (err) => {
reject(err);
});
});
}
function formatTokenCount(tokens) {
if (tokens >= 1000000) {
return `${(tokens / 1000000).toFixed(1)}M`;
} else if (tokens >= 1000) {
return `${(tokens / 1000).toFixed(1)}K`;
}
return tokens.toString();
}
chmod +x ~/.claude/statusline.js
code ~/.claude/settings.json
以下を追加する:
"statusLine": {
"type": "command",
"command": "~/.claude/statusline.js"
},
cursor agent login
cursor agent --list-models
cursor agent
(以降、Cursor CLI Agent内での操作です)
/model
「Shift」+「Tab」
あとは Claude Code ほとんど同じです。
~/.claude/settings.json に次の設定値を追加する。
"env": {
"CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS": "1"
},
# tmuxをインストールする
brew install tmux
# tmuxを起動する
tmux
claude
❯ チームを作れるような設定になっていますか??
以下のように返ってくれば、チームが作れる状態になっています。
⏺ はい、チーム機能は利用可能です。以下のツールが使えます:
- TeamCreate - チームの作成
- TaskCreate / TaskList / TaskUpdate - タスクの作成・管理
- SendMessage - チームメイト間のメッセージ送受信
- Task (サブエージェント) - 専門エージェントの起動
チームを作成すると、複数のエージェントが並行してタスクに取り組めます。例えば:
- Explore エージェント - コード調査専門
- general-purpose エージェント - コード編集・実装
- Bash エージェント - コマンド実行
- Plan エージェント - 設計・計画
何かチームで取り組みたいタスクはありますか?
Karabiner-Elements で、以下のように設定します。
{
"description": "【Claude Code】Shift+Enterを'バックスラッシュ+enter'に変換",
"manipulators": [
{
"conditions": [
{
"bundle_identifiers": [
"com.apple.Terminal"
],
"type": "frontmost_application_if"
},
{
"input_sources": [{ "language": "^ja$" }],
"type": "input_source_if"
}
],
"from": {
"key_code": "return_or_enter",
"modifiers": { "mandatory": ["shift"] }
},
"to": [
{ "select_input_source": { "language": "^en$" } },
{ "key_code": "backslash" },
{ "key_code": "return_or_enter" },
{
"key_code": "spacebar",
"modifiers": ["left_control"]
}
],
"type": "basic"
},
{
"conditions": [
{
"bundle_identifiers": [
"com.apple.Terminal"
],
"type": "frontmost_application_if"
},
{
"input_sources": [{ "language": "^en$" }],
"type": "input_source_if"
}
],
"from": {
"key_code": "return_or_enter",
"modifiers": { "mandatory": ["shift"] }
},
"to": [
{ "key_code": "backslash" },
{ "key_code": "return_or_enter" }
],
"type": "basic"
}
]
}
→ anthropic公式のスキル
/create-skill pdf-converter PDFファイルを画像に変換するスキル
/create-skill
→ フロントエンドのUIを書くのにすごく便利
https://github.com/nextlevelbuilder/ui-ux-pro-max-skill
→ AIで作ったサイトのSEO審査に使います
https://github.com/leonardomso/33-js-concepts/tree/master/.opencode/skill/seo-review
・初級編「体験」
まずは公式のskill-creatorスキルを使って、最初のスキルを作成する。
目標は、「AIに仕事を教える」という感覚を掴むこと。
・中級編「実践」
自分のための便利スキル(デバッグ、リファクタリング等)をゼロから設計する。
目標は、descriptionを磨き込み、トリガー精度を90%以上に高めること。
・上級編「スケール」
作成したスキルをHooksやSub-agentと連携させ、開発ワークフローに組み込む。
目標はスキルをチームで共有し、組織の「手続き的知識」をコード化する。