Awesome-omni-skill claudeforcodex
Claude Code CLI configuration guide for Codex. Use when users ask about: claude code config, ~/.claude/settings.json, claude plugins, claude agents, claude skills, claude hooks, claude mcp servers, or integrating tools with Claude Code.
git clone https://github.com/diegosouzapw/awesome-omni-skill
T=$(mktemp -d) && git clone --depth=1 https://github.com/diegosouzapw/awesome-omni-skill "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/ai-agents/claudeforcodex" ~/.claude/skills/diegosouzapw-awesome-omni-skill-claudeforcodex && rm -rf "$T"
skills/ai-agents/claudeforcodex/SKILL.md- references API keys
Claude Code CLI Configuration Guide
Configure and extend Anthropic's Claude Code CLI for optimal development workflows.
Quick Reference
| Task | Command/Location |
|---|---|
| Config file | |
| Project config | (in project root) |
| Plugins | or marketplace |
| Add MCP server | Edit or plugin |
| Skills location | Plugin directories |
Core Configuration
Edit
~/.claude/settings.json for global settings:
{ "permissions": { "allow": ["Bash(*)", "Read(*)", "Write(*)"], "deny": [] }, "env": { "ANTHROPIC_API_KEY": "sk-..." } }
Project-level: Create
.claude/settings.json in project root to override.
Permission System
Claude Code uses explicit tool permissions:
{ "permissions": { "allow": [ "Bash(*)", // All bash commands "Read(*)", // All file reads "Write(~/projects/*)", // Write only in projects "mcp:server_name:*" // All tools from MCP server ], "deny": [ "Bash(rm -rf *)" // Block dangerous commands ] } }
Permission patterns:
- Allow all uses of toolTool(*)
- Allow with path prefixTool(/path/*)
- Specific MCP toolmcp:server:tool
Plugin System
Claude Code has two plugin patterns:
Standalone Plugin (entire repo = one plugin)
my-plugin/ ├── .claude-plugin/ │ └── plugin.json # Required for standalone ├── commands/ ├── agents/ ├── skills/ │ └── my-skill/ │ └── SKILL.md # ONE level deep only! ├── hooks/ └── .mcp.json
Marketplace Plugin (repo contains multiple plugins)
my-marketplace/ ├── .claude-plugin/ │ └── marketplace.json # Lists all plugins └── plugins/ ├── plugin-a/ │ ├── plugin.json # AT ROOT (not .claude-plugin/) │ └── skills/ │ └── skill-name/ │ └── SKILL.md └── plugin-b/ └── plugin.json
Critical Rules:
- Marketplace plugins:
at plugin root, NOT inplugin.json.claude-plugin/ - Skills ONE level deep:
- NOskills/name/SKILL.mdskills/a/skills/b/ - No plugin.json per skill - only one per plugin
- Explicit skills array in marketplace.json (recommended)
Install plugin:
claude plugins add /path/to/plugin claude plugins add https://github.com/user/plugin # Install specific branch or tag (v2.0.28+) claude plugins add https://github.com/user/plugin#develop claude plugins add https://github.com/user/plugin#v1.0.0
Team sharing: Add to
.claude/settings.json:
{ "extraKnownMarketplaces": [ "https://github.com/company/plugins#stable" ] }
Commands (Slash Commands)
Create
commands/name.md:
--- description: Brief description for autocomplete argument-hint: "[optional args]" model: sonnet allowed-tools: - Bash - Read context: fork hooks: PostToolUse: - matcher: "Bash" hooks: - type: command command: "${CLAUDE_PLUGIN_ROOT}/scripts/notify.sh" --- # Command Name Instructions Claude follows when user types /name
Frontmatter fields:
(required) - Help text (<60 chars)description
- Document expected argumentsargument-hint
- Override model (opus/sonnet/haiku)model
- Restrict available tools (YAML list)allowed-tools
- Run in forked sub-agentcontext: fork
- Agent type for executionagent
- Command-scoped hookshooks
- Prevent SlashCommand tool callsdisable-model-invocation
Invoke:
/plugin-name:command-name or /command-name
Agents (Subagents)
Create
agents/name.md:
--- name: agent-name description: "What this agent specializes in. Include trigger phrases." model: sonnet tools: - Bash - Read - Write - Edit - Glob - Grep skills: - skill-name permissionMode: default disallowedTools: - WebSearch hooks: Stop: - hooks: - type: prompt prompt: "Verify work is complete before stopping." --- # Agent Name System prompt and instructions for the agent.
Frontmatter fields:
(required) - Agent identifier (lowercase, hyphens)name
(required) - When/why to use, include trigger phrasesdescription
- opus/sonnet/haiku (default: inherit)model
- Restrict available tools (YAML list, omit for all)tools
- Auto-load specific skillsskills
- default/acceptEdits/plan/bypassPermissionspermissionMode
- Explicitly block toolsdisallowedTools
- Agent-scoped hooks (PreToolUse, PostToolUse, Stop)hooks
Invoke:
claude --agent plugin-name:agent-name
Spawn from Claude:
Task(subagent_type="plugin:agent", prompt="Do something")
Skills (Auto-Knowledge)
Create
skills/name/SKILL.md:
--- name: skill-name description: "When to trigger this skill. Be specific about keywords and contexts." user-invocable: true model: sonnet context: fork allowed-tools: - Read - Write - Bash hooks: PostToolUse: - matcher: "Write" hooks: - type: command command: "${CLAUDE_PLUGIN_ROOT}/scripts/validate.sh" --- # Skill Name Knowledge and instructions loaded when skill triggers.
Frontmatter fields:
(required) - Skill identifier (lowercase, hyphens)name
(required) - Trigger phrases and usage contextdescription
- Show in slash command menu (default: true)user-invocable
- Override model (opus/sonnet/haiku)model
- Run in forked sub-agentcontext: fork
- Agent type for executionagent
- Restrict available tools (YAML list)allowed-tools
- Skill-scoped hookshooks
Key features:
- Hot-reload (v2.1.0+): Skills in
or~/.claude/skills
reload without restart.claude/skills - Unified with commands (v2.1.3+): Skills visible in
menu by default/ - Progress display: Tool uses shown while skill executes
Critical: Skills must be ONE level deep:
skills/ ├── skill-a/ # ✅ Correct │ └── SKILL.md └── skill-b/ # ✅ Correct └── SKILL.md # ❌ WRONG - nested skills won't be discovered: skills/ └── parent/ └── skills/ # Nesting breaks discovery! └── child/ └── SKILL.md
Note: Skills auto-load based on conversation context matching the description.
Hooks (Event Handlers)
Create
hooks/hooks.json or define in component frontmatter:
{ "hooks": { "PostToolUse": [{ "matcher": "Write|Edit", "hooks": [{ "type": "command", "command": "${CLAUDE_PLUGIN_ROOT}/scripts/lint.sh", "timeout": 30000 }] }], "Stop": [{ "hooks": [{ "type": "prompt", "prompt": "Verify all tests pass before stopping.", "model": "haiku" }] }] } }
Hook events:
| Event | When | Special Features |
|---|---|---|
| Before tool execution | Can modify , return |
| After tool execution | Access |
| Permission dialog shown | Can auto-approve/deny |
| User submits prompt | output |
| Notifications sent | Supports values |
| Claude attempts to stop | Prompt-based hooks supported |
| Subagent stops | , |
| Subagent starts | - |
| Session begins | if used |
| Session ends | supported |
| Before history compacted | - |
Hook types:
- Execute shell scriptscommand
- LLM-driven evaluation (can specifyprompt
)model
Hook configuration:
- Tool/event pattern (regex,matcher
wildcard)*
- Timeout in ms (default: 10 minutes)timeout
- Run only once per sessiononce: true
- Model for prompt-based hooksmodel
MCP Server Integration
Create
.mcp.json in plugin or project root:
{ "mcpServers": { "my-server": { "command": "npx", "args": ["-y", "@company/mcp-server"], "env": { "API_KEY": "xxx" } } } }
Use MCP tools:
mcp-cli tools # List all MCP tools mcp-cli info server/tool # Get tool schema mcp-cli call server/tool '{}' # Call tool
Claude Code vs Codex
| Aspect | Claude Code | Codex |
|---|---|---|
| Provider | Anthropic | OpenAI |
| Config | | |
| Plugins | Full plugin system | Skills only |
| Skills | Plugin-based | |
| Agents | Plugin agents | N/A |
| Hooks | Plugin hooks | N/A |
| MCP | or plugin | sections |
| Permissions | JSON allow/deny | Sandbox modes |
Common Workflows
Run with Full Permissions
claude --dangerously-skip-permissions
Use Specific Agent
claude --agent conductor:code-reviewer
Install Marketplace Plugin
claude plugins add marketplace-name
Debug Plugin Loading
claude --debug
Auditing Plugin Structure
When auditing a Claude Code plugin/marketplace for issues:
# Find all SKILL.md files find plugins -name "SKILL.md" | sort # Find nested skills (WRONG structure) find plugins -path "*/skills/*/skills/*" -name "SKILL.md" # Find all plugin.json files find plugins -name "plugin.json" | sort # Find orphaned plugin.json in skill dirs (should be 0) find plugins -path "*/skills/*/plugin.json" | wc -l # Check marketplace.json has skills arrays cat .claude-plugin/marketplace.json | jq '.plugins[].skills'
Common Issues:
| Issue | Symptom | Fix |
|---|---|---|
| Nested skills | Skills not loading | Flatten to |
| plugin.json in skill dirs | Confusion | Remove, only one per plugin |
| Missing skills array | Skills not discovered | Add to marketplace.json |
| Wrong plugin.json location | Plugin not loading | Move to plugin root |
Reference Files
- Complete plugin layoutreferences/plugin-structure.md