chore: initialize recovered claude workspace
This commit is contained in:
205
src/tools/AgentTool/built-in/claudeCodeGuideAgent.ts
Normal file
205
src/tools/AgentTool/built-in/claudeCodeGuideAgent.ts
Normal file
@@ -0,0 +1,205 @@
|
||||
import { 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 into
|
||||
2. Use ${WEB_FETCH_TOOL_NAME} to fetch the appropriate docs map
|
||||
3. Identify the most relevant documentation URLs from the map
|
||||
4. Fetch the specific documentation pages
|
||||
5. Provide clear, actionable guidance based on official documentation
|
||||
6. Use ${WEB_SEARCH_TOOL_NAME} if docs don't cover the topic
|
||||
7. 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
|
||||
},
|
||||
}
|
||||
Reference in New Issue
Block a user