Anthropic publishes the available environment variables, as well as the many settings you can change via JSON configs on their [Claude Code Settings](https://code.claude.com/docs/en/settings) page. This page also lists the tools that Claude Code has by default. Claude Code can be run with `--debug`, `--mcp-debug`, or `--verbose` flags to gain greater insight into what it is doing and help identify configuration issues. A list of CLI flags can be found [in the documentation](https://code.claude.com/docs/en/cli-reference#cli-flags). Two core features allow for customization and extension of Claude Code's behavior: - **[Skills](https://code.claude.com/docs/en/skills#what-are-agent-skills%3F)**: Model-invoked. Can include code for Claude to execute. The main Claude Code agent remains in control, rather than delegating to sub-agents. Good for domain-specific instructions or deterministic workflows. - **[Slash commands](https://code.claude.com/docs/en/slash-commands#custom-slash-commands)**: User-invoked. Consists of frequently-used prompts. Bash command output can be included in the command's prompt, such as with the following syntax example pulled from the documentation: ``` - Current git status: !`git status` ``` [MCP servers can expose slash commands](https://code.claude.com/docs/en/slash-commands#mcp-slash-commands) (via the [prompts](https://modelcontextprotocol.io/specification/2025-06-18/server/prompts) feature). Claude Code can also be encouraged to use slash commands programmatically with its `SlashCommand` tool. [Plugins](https://code.claude.com/docs/en/plugins-reference) sound like an interesting way to standardize a set of configurations or features across a user base. For example, plugins can include MCP server connections, pre- and post-tool hooks, agents, skills, slash commands, and more. A plugin is basically just a collection of the same configuration files and scripts you would use to configure your personal Claude Code instance. Anthropic provides some [example plugins](https://github.com/anthropics/claude-code/tree/main/plugins) in the Claude Code repository. [From the docs](https://code.claude.com/docs/en/mcp#environment-variable-expansion-in-mcp-json), here's how you would include a remote MCP server in a Claude Code plugin using environment variables for header authentication: ```json { "mcpServers": { "api-server": { "type": "http", "url": "${API_BASE_URL:-https://api.example.com}/mcp", "headers": { "Authorization": "Bearer ${API_KEY}" } } } } ``` This configuration would reside in the `.mcp.json` file in the root of the plugin's directory, or inline in its `plugin.json`. MCP servers can expose slash commands ## Claude Code's System Prompt Anthropic states that the Agent SDK uses an empty system prompt by default. On the other hand, Claude Code itself has an unpublished system prompt that includes instructions for its default tools and more. You can, however, append to or fully replace Claude Code's system prompt using [system prompt flags](https://code.claude.com/docs/en/cli-reference#system-prompt-flags). When asking Claude Code to describe its system prompt, specifically with respect to code-specific tasks, this is what it told me: > My system prompt is heavily optimized for **software engineering tasks via CLI**. Here are the high-level concepts: > > **Core identity & behavior:** > - I'm "Claude Code" - Anthropic's official CLI for software engineering  > - Short, concise responses (for terminal display) > - No emojis unless requested > - Professional, objective tone (facts over validation) > - GitHub-flavored markdown formatting > > **Tool use framework:** > - File operations (Read, Write, Edit, Glob, Grep) > - Bash commands > - Web search & fetch > - Task management with TodoWrite > - Specialized agents for complex tasks > - Strong preference for using specialized tools over bash > > **Code-specific emphasis:** > - Heavy focus on task planning and tracking with TodoWrite tool > - Git workflows (commits, PRs, etc.) > - Editing existing files rather than creating new ones > - Code references with file_path:line_number format > - Security vulnerability awareness > > **Will this work against you for non-coding use?** > > Potentially yes, in these ways: > - **Brevity bias** - I'm instructed to be concise for CLI, which might not suit all use cases > - **Task management overhead** - Heavy emphasis on using TodoWrite for planning, which may feel unnecessary for simple questions > - **File operation restrictions** - Instructions to avoid creating files unless necessary > - **Code-oriented workflows** - Many specialized instructions for git, testing, etc. that don't apply > > However, my core reasoning, research, and analysis capabilities remain intact. For pure conversation, research, or non-coding tasks, the system prompt shouldn't actively interfere - it's just not optimized for those cases.