Something went wrong. Try again.
source dump of claude code forked from oppi.li/claude-code
Something went wrong. Try again.
9.0 kB · 205 lines
TypeScript
at main
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206import { BASH_TOOL_NAME } from 'src/tools/BashTool/toolName.js'import { FILE_READ_TOOL_NAME } from 'src/tools/FileReadTool/prompt.js'import { GLOB_TOOL_NAME } from 'src/tools/GlobTool/prompt.js'import { GREP_TOOL_NAME } from 'src/tools/GrepTool/prompt.js'import { SEND_MESSAGE_TOOL_NAME } from 'src/tools/SendMessageTool/constants.js'import { WEB_FETCH_TOOL_NAME } from 'src/tools/WebFetchTool/prompt.js'import { WEB_SEARCH_TOOL_NAME } from 'src/tools/WebSearchTool/prompt.js'import { isUsing3PServices } from 'src/utils/auth.js'import { hasEmbeddedSearchTools } from 'src/utils/embeddedTools.js'import { getSettings_DEPRECATED } from 'src/utils/settings/settings.js'import { jsonStringify } from '../../../utils/slowOperations.js'import type { AgentDefinition, BuiltInAgentDefinition,} from '../loadAgentsDir.js'
const CLAUDE_CODE_DOCS_MAP_URL = 'https://code.claude.com/docs/en/claude_code_docs_map.md'const CDP_DOCS_MAP_URL = 'https://platform.claude.com/llms.txt'
export const CLAUDE_CODE_GUIDE_AGENT_TYPE = 'claude-code-guide'
function getClaudeCodeGuideBasePrompt(): string { // Ant-native builds alias find/grep to embedded bfs/ugrep and remove the // dedicated Glob/Grep tools, so point at find/grep instead. const localSearchHint = hasEmbeddedSearchTools() ? `${FILE_READ_TOOL_NAME}, \`find\`, and \`grep\`` : `${FILE_READ_TOOL_NAME}, ${GLOB_TOOL_NAME}, and ${GREP_TOOL_NAME}`
return `You are the Claude guide agent. Your primary responsibility is helping users understand and use Claude Code, the Claude Agent SDK, and the Claude API (formerly the Anthropic API) effectively.
**Your expertise spans three domains:**
1. **Claude Code** (the CLI tool): Installation, configuration, hooks, skills, MCP servers, keyboard shortcuts, IDE integrations, settings, and workflows.
2. **Claude Agent SDK**: A framework for building custom AI agents based on Claude Code technology. Available for Node.js/TypeScript and Python.
3. **Claude API**: The Claude API (formerly known as the Anthropic API) for direct model interaction, tool use, and integrations.
**Documentation sources:**
- **Claude Code docs** (${CLAUDE_CODE_DOCS_MAP_URL}): Fetch this for questions about the Claude Code CLI tool, including: - Installation, setup, and getting started - Hooks (pre/post command execution) - Custom skills - MCP server configuration - IDE integrations (VS Code, JetBrains) - Settings files and configuration - Keyboard shortcuts and hotkeys - Subagents and plugins - Sandboxing and security
- **Claude Agent SDK docs** (${CDP_DOCS_MAP_URL}): Fetch this for questions about building agents with the SDK, including: - SDK overview and getting started (Python and TypeScript) - Agent configuration + custom tools - Session management and permissions - MCP integration in agents - Hosting and deployment - Cost tracking and context management Note: Agent SDK docs are part of the Claude API documentation at the same URL.
- **Claude API docs** (${CDP_DOCS_MAP_URL}): Fetch this for questions about the Claude API (formerly the Anthropic API), including: - Messages API and streaming - Tool use (function calling) and Anthropic-defined tools (computer use, code execution, web search, text editor, bash, programmatic tool calling, tool search tool, context editing, Files API, structured outputs) - Vision, PDF support, and citations - Extended thinking and structured outputs - MCP connector for remote MCP servers - Cloud provider integrations (Bedrock, Vertex AI, Foundry)
**Approach:**1. Determine which domain the user's question falls into2. Use ${WEB_FETCH_TOOL_NAME} to fetch the appropriate docs map3. Identify the most relevant documentation URLs from the map4. Fetch the specific documentation pages5. Provide clear, actionable guidance based on official documentation6. Use ${WEB_SEARCH_TOOL_NAME} if docs don't cover the topic7. Reference local project files (CLAUDE.md, .claude/ directory) when relevant using ${localSearchHint}
**Guidelines:**- Always prioritize official documentation over assumptions- Keep responses concise and actionable- Include specific examples or code snippets when helpful- Reference exact documentation URLs in your responses- Help users discover features by proactively suggesting related commands, shortcuts, or capabilities
Complete the user's request by providing accurate, documentation-based guidance.`}
function getFeedbackGuideline(): string { // For 3P services (Bedrock/Vertex/Foundry), /feedback command is disabled // Direct users to the appropriate feedback channel instead if (isUsing3PServices()) { return `- When you cannot find an answer or the feature doesn't exist, direct the user to ${MACRO.ISSUES_EXPLAINER}` } return "- When you cannot find an answer or the feature doesn't exist, direct the user to use /feedback to report a feature request or bug"}
export const CLAUDE_CODE_GUIDE_AGENT: BuiltInAgentDefinition = { agentType: CLAUDE_CODE_GUIDE_AGENT_TYPE, whenToUse: `Use this agent when the user asks questions ("Can Claude...", "Does Claude...", "How do I...") about: (1) Claude Code (the CLI tool) - features, hooks, slash commands, MCP servers, settings, IDE integrations, keyboard shortcuts; (2) Claude Agent SDK - building custom agents; (3) Claude API (formerly Anthropic API) - API usage, tool use, Anthropic SDK usage. **IMPORTANT:** Before spawning a new agent, check if there is already a running or recently completed claude-code-guide agent that you can continue via ${SEND_MESSAGE_TOOL_NAME}.`, // Ant-native builds: Glob/Grep tools are removed; use Bash (with embedded // bfs/ugrep via find/grep aliases) for local file search instead. tools: hasEmbeddedSearchTools() ? [ BASH_TOOL_NAME, FILE_READ_TOOL_NAME, WEB_FETCH_TOOL_NAME, WEB_SEARCH_TOOL_NAME, ] : [ GLOB_TOOL_NAME, GREP_TOOL_NAME, FILE_READ_TOOL_NAME, WEB_FETCH_TOOL_NAME, WEB_SEARCH_TOOL_NAME, ], source: 'built-in', baseDir: 'built-in', model: 'haiku', permissionMode: 'dontAsk', getSystemPrompt({ toolUseContext }) { const commands = toolUseContext.options.commands
// Build context sections const contextSections: string[] = []
// 1. Custom skills const customCommands = commands.filter(cmd => cmd.type === 'prompt') if (customCommands.length > 0) { const commandList = customCommands .map(cmd => `- /${cmd.name}: ${cmd.description}`) .join('\n') contextSections.push( `**Available custom skills in this project:**\n${commandList}`, ) }
// 2. Custom agents from .claude/agents/ const customAgents = toolUseContext.options.agentDefinitions.activeAgents.filter( (a: AgentDefinition) => a.source !== 'built-in', ) if (customAgents.length > 0) { const agentList = customAgents .map((a: AgentDefinition) => `- ${a.agentType}: ${a.whenToUse}`) .join('\n') contextSections.push( `**Available custom agents configured:**\n${agentList}`, ) }
// 3. MCP servers const mcpClients = toolUseContext.options.mcpClients if (mcpClients && mcpClients.length > 0) { const mcpList = mcpClients .map((client: { name: string }) => `- ${client.name}`) .join('\n') contextSections.push(`**Configured MCP servers:**\n${mcpList}`) }
// 4. Plugin commands const pluginCommands = commands.filter( cmd => cmd.type === 'prompt' && cmd.source === 'plugin', ) if (pluginCommands.length > 0) { const pluginList = pluginCommands .map(cmd => `- /${cmd.name}: ${cmd.description}`) .join('\n') contextSections.push(`**Available plugin skills:**\n${pluginList}`) }
// 5. User settings const settings = getSettings_DEPRECATED() if (Object.keys(settings).length > 0) { // eslint-disable-next-line no-restricted-syntax -- human-facing UI, not tool_result const settingsJson = jsonStringify(settings, null, 2) contextSections.push( `**User's settings.json:**\n\`\`\`json\n${settingsJson}\n\`\`\``, ) }
// Add the feedback guideline (conditional based on whether user is using 3P services) const feedbackGuideline = getFeedbackGuideline() const basePromptWithFeedback = `${getClaudeCodeGuideBasePrompt()}${feedbackGuideline}`
// If we have any context to add, append it to the base system prompt if (contextSections.length > 0) { return `${basePromptWithFeedback}
---
# User's Current Configuration
The user has the following custom setup in their environment:
${contextSections.join('\n\n')}
When answering questions, consider these configured features and proactively suggest them when relevant.` }
// Return the base prompt if no context to add return basePromptWithFeedback },}