mirror of
https://github.com/Piebald-AI/claude-code-system-prompts.git
synced 2026-05-30 05:35:24 +08:00
Add a script to update the prompts
This commit is contained in:
parent
c64a9d3fda
commit
41eba70cfa
30
README.md
30
README.md
@ -37,37 +37,37 @@ Sub-agents and utilities.
|
||||
### Creation Assistants
|
||||
|
||||
- [Agent Prompt: Agent creation architect](./system-prompts/agent-prompt-agent-creation-architect.md) (**1111** tks) - System prompt for creating custom AI agents with detailed specifications.
|
||||
- [Agent Prompt: CLAUDE.md creation](./system-prompts/agent-prompt-claudemd-creation.md) (**384** tks) - System prompt for analyzing codebases and creating CLAUDE.md documentation.
|
||||
- [Agent Prompt: Status line setup](./system-prompts/agent-prompt-status-line-setup.md) (**993** tks) - System prompt for the statusline-setup agent that configures status line.
|
||||
- [Agent Prompt: CLAUDE.md creation](./system-prompts/agent-prompt-claudemd-creation.md) (**384** tks) - System prompt for analyzing codebases and creating CLAUDE.md documentation files.
|
||||
- [Agent Prompt: Status line setup](./system-prompts/agent-prompt-status-line-setup.md) (**993** tks) - System prompt for the statusline-setup agent that configures status line display.
|
||||
|
||||
### Slash commands
|
||||
|
||||
- [Agent Prompt: /pr-comments slash command](./system-prompts/agent-prompt-pr-comments-slash-command.md) (**404** tks) - System prompt for fetching and displaying GitHub PR comments.
|
||||
- [Agent Prompt: /review-pr slash command](./system-prompts/agent-prompt-review-pr-slash-command.md) (**245** tks) - System prompt for reviewing GitHub pull requests with code analysis.
|
||||
- [Agent Prompt: /security-review slash](./system-prompts/agent-prompt-security-review-slash.md) (**2614** tks) - Comprehensive security review prompt for analyzing code changes with focus on.
|
||||
- [Agent Prompt: /security-review slash](./system-prompts/agent-prompt-security-review-slash.md) (**2614** tks) - Comprehensive security review prompt for analyzing code changes with focus on exploitable vulnerabilities.
|
||||
|
||||
### Utilities
|
||||
|
||||
- [Agent Prompt: Bash command file path extraction](./system-prompts/agent-prompt-bash-command-file-path-extraction.md) (**286** tks) - System prompt for extracting file paths from bash command output.
|
||||
- [Agent Prompt: Bash command prefix detection](./system-prompts/agent-prompt-bash-command-prefix-detection.md) (**835** tks) - System prompt for detecting command prefixes and command injection.
|
||||
- [Agent Prompt: Bash output summarization](./system-prompts/agent-prompt-bash-output-summarization.md) (**605** tks) - System prompt for determining whether bash command output should be summarized.
|
||||
- [Agent Prompt: Conversation summarization](./system-prompts/agent-prompt-conversation-summarization.md) (**1121** tks) - System prompt for creating detailed conversation summaries.
|
||||
- [Agent Prompt: Conversation summarization with additional instructions](./system-prompts/agent-prompt-conversation-summarization-with-additional-instructions.md) (**1133** tks) - Extended summarization prompt with support for custom additional instructions.
|
||||
- [Agent Prompt: Prompt Hook execution](./system-prompts/agent-prompt-prompt-hook-execution.md) (**134** tks) - Prompt given to Claude when acting evaluating whether to pass or fail a prompt.
|
||||
- [Agent Prompt: Conversation summarization](./system-prompts/agent-prompt-conversation-summarization.md) (**1121** tks) - System prompt for creating detailed conversation summaries.
|
||||
- [Agent Prompt: Prompt Hook execution](./system-prompts/agent-prompt-prompt-hook-execution.md) (**134** tks) - Prompt given to Claude when acting evaluating whether to pass or fail a prompt hook..
|
||||
- [Agent Prompt: Session notes template](./system-prompts/agent-prompt-session-notes-template.md) (**226** tks) - Template structure for session notes tracking coding work and decisions.
|
||||
- [Agent Prompt: Session notes update instructions](./system-prompts/agent-prompt-session-notes-update-instructions.md) (**730** tks) - Instructions for updating session notes files during conversations.
|
||||
- [Agent Prompt: Session title generation](./system-prompts/agent-prompt-session-title-generation.md) (**159** tks) - System prompt for generating succinct titles for coding sessions.
|
||||
- [Agent Prompt: Update Magic Docs](./system-prompts/agent-prompt-update-magic-docs.md) (**718** tks) - Prompt for the magic-docs agent.
|
||||
- [Agent Prompt: Update Magic Docs](./system-prompts/agent-prompt-update-magic-docs.md) (**718** tks) - Prompt for the magic-docs agent..
|
||||
- [Agent Prompt: User sentiment analysis](./system-prompts/agent-prompt-user-sentiment-analysis.md) (**205** tks) - System prompt for analyzing user frustration and PR creation requests.
|
||||
- [Agent Prompt: WebFetch summarizer](./system-prompts/agent-prompt-webfetch-summarizer.md) (**147** tks) - Prompt for agent that summarizes verbose output from WebFetch for the main.
|
||||
- [Agent Prompt: WebFetch summarizer](./system-prompts/agent-prompt-webfetch-summarizer.md) (**147** tks) - Prompt for agent that summarizes verbose output from WebFetch for the main model.
|
||||
|
||||
<!--
|
||||
### Data
|
||||
|
||||
Misc large strings.
|
||||
|
||||
- [Data: GitHub Actions workflow for @claude mentions](./system-prompts/data-github-actions-workflow-for-claude-mentions.md) (**531** tks) - GitHub Actions workflow template for triggering Claude Code via @claude.
|
||||
- [Data: GitHub Actions workflow for automated code review (beta)](./system-prompts/data-github-actions-workflow-for-automated-code-review-beta.md) (**573** tks) - GitHub Actions workflow template for automated Claude Code reviews using.
|
||||
- [Data: GitHub Actions workflow for @claude mentions](./system-prompts/data-github-actions-workflow-for-@claude-mentions.md) (**531** tks) - GitHub Actions workflow template for triggering Claude Code via @claude mentions.
|
||||
- [Data: GitHub Actions workflow for automated code review (beta)](./system-prompts/data-github-actions-workflow-for-automated-code-review-beta.md) (**573** tks) - GitHub Actions workflow template for automated Claude Code reviews using direct_prompt.
|
||||
- [Data: GitHub App installation PR description](./system-prompts/data-github-app-installation-pr-description.md) (**424** tks) - Template for PR description when installing Claude Code GitHub App integration.
|
||||
-->
|
||||
|
||||
@ -75,9 +75,9 @@ Misc large strings.
|
||||
|
||||
Parts of the main system prompt.
|
||||
|
||||
- [**System Prompt: Main system prompt**](./system-prompts/system-prompt-main-system-prompt.md) (**2601** tks) - Core system prompt for Claude Code defining behavior, tone, and tool usage.
|
||||
- [System Prompt: Learning mode](./system-prompts/system-prompt-learning-mode.md) (**1042** tks) - System Prompt: Main system prompt for learning mode with human collaboration.
|
||||
- [**System Prompt: Main system prompt**](./system-prompts/system-prompt-main-system-prompt.md) (**2601** tks) - Core system prompt for Claude Code defining behavior, tone, and tool usage policies.
|
||||
- [System Prompt: Learning mode (insights)](./system-prompts/system-prompt-learning-mode-insights.md) (**142** tks) - Instructions for providing educational insights when learning mode is active.
|
||||
- [System Prompt: Learning mode](./system-prompts/system-prompt-learning-mode.md) (**1042** tks) - System Prompt: Main system prompt for learning mode with human collaboration instructions.
|
||||
- [System Prompt: MCP CLI](./system-prompts/system-prompt-mcp-cli.md) (**1357** tks) - Instructions for using mcp-cli to interact with Model Context Protocol servers.
|
||||
|
||||
### System Reminders
|
||||
@ -87,19 +87,19 @@ Text for large system reminders.
|
||||
> [!NOTE]
|
||||
> Note that we're planning to add a **system reminder creator/editor** to [tweakcc](https://github.com/Piebald-AI/tweakcc); :+1: [this issue](https://github.com/Piebald-AI/tweakcc/issues/113) if you're interested in that idea.
|
||||
|
||||
- [System Reminder: Plan mode is active](./system-prompts/system-reminder-plan-mode-is-active.md) (**242** tks) - System reminder sent to Claude when the user enters plan mode.
|
||||
- [System Reminder: Plan mode is active (enhanced)](./system-prompts/system-reminder-plan-mode-is-active-enhanced.md) (**1093** tks) - Enhanced plan mode system reminder.
|
||||
- [System Reminder: Plan mode is active (for subagents)](./system-prompts/system-reminder-plan-mode-is-active-for-subagents.md) (**310** tks) - Simplified plan mode system reminder for sub agents.
|
||||
- [System Reminder: Plan mode is active](./system-prompts/system-reminder-plan-mode-is-active.md) (**242** tks) - System reminder sent to Claude when the user enters plan mode.
|
||||
|
||||
### Builtin Tool Descriptions
|
||||
|
||||
- [Tool Description: Bash](./system-prompts/tool-description-bash.md) (**1074** tks) - Description for the Bash tool, which allows Claude to run shell commands.
|
||||
- [Tool Description: Edit](./system-prompts/tool-description-edit.md) (**278** tks) - Tool description for performing exact string replacements in files.
|
||||
- [Tool Description: ExitPlanMode](./system-prompts/tool-description-exitplanmode.md) (**342** tks) - Description for the ExitPlanMode tool, which presents a plan dialog for the.
|
||||
- [Tool Description: ExitPlanMode v2](./system-prompts/tool-description-exitplanmode-v2.md) (**450** tks) - V2 description for the ExitPlanMode tool, which presents a plan dialog for the.
|
||||
- [Tool Description: ExitPlanMode v2](./system-prompts/tool-description-exitplanmode-v2.md) (**450** tks) - V2 description for the ExitPlanMode tool, which presents a plan dialog for the user to approve.
|
||||
- [Tool Description: ExitPlanMode](./system-prompts/tool-description-exitplanmode.md) (**342** tks) - Description for the ExitPlanMode tool, which presents a plan dialog for the user to approve.
|
||||
- [Tool Description: Glob](./system-prompts/tool-description-glob.md) (**122** tks) - Tool description for file pattern matching and searching by name.
|
||||
- [Tool Description: Grep](./system-prompts/tool-description-grep.md) (**300** tks) - Tool description for content search using ripgrep.
|
||||
- [Tool Description: LSP](./system-prompts/tool-description-lsp.md) (**172** tks) - Description for the LSP tool.
|
||||
- [Tool Description: LSP](./system-prompts/tool-description-lsp.md) (**172** tks) - Description for the LSP tool..
|
||||
- [Tool Description: NotebookEdit](./system-prompts/tool-description-notebookedit.md) (**121** tks) - Tool description for editing Jupyter notebook cells.
|
||||
- [Tool Description: ReadFile](./system-prompts/tool-description-readfile.md) (**439** tks) - Tool description for reading files.
|
||||
- [Tool Description: Skill](./system-prompts/tool-description-skill.md) (**279** tks) - Tool description for executing skills in the main conversation.
|
||||
|
||||
470
scripts/updatePrompts.js
Normal file
470
scripts/updatePrompts.js
Normal file
@ -0,0 +1,470 @@
|
||||
#!/usr/bin/env node
|
||||
|
||||
import { readFileSync, writeFileSync, readdirSync, unlinkSync } from 'fs';
|
||||
import { join, dirname } from 'path';
|
||||
import { fileURLToPath } from 'url';
|
||||
|
||||
const __filename = fileURLToPath(import.meta.url);
|
||||
const __dirname = dirname(__filename);
|
||||
const ROOT_DIR = join(__dirname, '..');
|
||||
const SYSTEM_PROMPTS_DIR = join(ROOT_DIR, 'system-prompts');
|
||||
const README_PATH = join(ROOT_DIR, 'README.md');
|
||||
|
||||
// Get API key from environment
|
||||
const ANTHROPIC_API_KEY = process.env.ANTHROPIC_API_KEY;
|
||||
if (!ANTHROPIC_API_KEY) {
|
||||
console.error('Error: ANTHROPIC_API_KEY environment variable is required');
|
||||
console.error('Set it with: export ANTHROPIC_API_KEY=your-api-key');
|
||||
process.exit(1);
|
||||
}
|
||||
|
||||
/**
|
||||
* Count tokens using Anthropic's token counting API
|
||||
*/
|
||||
async function countTokens(text) {
|
||||
const response = await fetch('https://api.anthropic.com/v1/messages/count_tokens', {
|
||||
method: 'POST',
|
||||
headers: {
|
||||
'Content-Type': 'application/json',
|
||||
'anthropic-version': '2023-06-01',
|
||||
'x-api-key': ANTHROPIC_API_KEY
|
||||
},
|
||||
body: JSON.stringify({
|
||||
model: 'claude-sonnet-4-20250514',
|
||||
messages: [
|
||||
{
|
||||
role: 'user',
|
||||
content: text
|
||||
}
|
||||
]
|
||||
})
|
||||
});
|
||||
|
||||
if (!response.ok) {
|
||||
const error = await response.text();
|
||||
throw new Error(`Token counting API error: ${response.status} ${error}`);
|
||||
}
|
||||
|
||||
const data = await response.json();
|
||||
return data.input_tokens;
|
||||
}
|
||||
|
||||
/**
|
||||
* Batch count tokens for multiple prompts with rate limiting
|
||||
*/
|
||||
async function countTokensBatch(prompts, batchSize = 5, delayMs = 100) {
|
||||
const results = new Map();
|
||||
|
||||
for (let i = 0; i < prompts.length; i += batchSize) {
|
||||
const batch = prompts.slice(i, i + batchSize);
|
||||
const promises = batch.map(async ({ filename, content }) => {
|
||||
try {
|
||||
const tokens = await countTokens(content);
|
||||
return { filename, tokens };
|
||||
} catch (err) {
|
||||
console.error(`Error counting tokens for ${filename}: ${err.message}`);
|
||||
return { filename, tokens: 0 };
|
||||
}
|
||||
});
|
||||
|
||||
const batchResults = await Promise.all(promises);
|
||||
batchResults.forEach(({ filename, tokens }) => {
|
||||
results.set(filename, tokens);
|
||||
});
|
||||
|
||||
// Rate limiting delay between batches
|
||||
if (i + batchSize < prompts.length) {
|
||||
await new Promise(resolve => setTimeout(resolve, delayMs));
|
||||
}
|
||||
}
|
||||
|
||||
return results;
|
||||
}
|
||||
|
||||
/**
|
||||
* Convert prompt name to filename
|
||||
* Examples:
|
||||
* "Agent Prompt: Explore" → "agent-prompt-explore.md"
|
||||
* "System Prompt: Main system prompt" → "system-prompt-main-system-prompt.md"
|
||||
* "Tool Description: Bash" → "tool-description-bash.md"
|
||||
*/
|
||||
function nameToFilename(name) {
|
||||
// Determine prefix based on the name prefix
|
||||
let prefix = '';
|
||||
let namePart = name;
|
||||
|
||||
if (name.startsWith('Agent Prompt: ')) {
|
||||
prefix = 'agent-prompt-';
|
||||
namePart = name.substring('Agent Prompt: '.length);
|
||||
} else if (name.startsWith('System Prompt: ')) {
|
||||
prefix = 'system-prompt-';
|
||||
namePart = name.substring('System Prompt: '.length);
|
||||
} else if (name.startsWith('System Reminder: ')) {
|
||||
prefix = 'system-reminder-';
|
||||
namePart = name.substring('System Reminder: '.length);
|
||||
} else if (name.startsWith('Tool Description: ')) {
|
||||
prefix = 'tool-description-';
|
||||
namePart = name.substring('Tool Description: '.length);
|
||||
} else if (name.startsWith('Data: ')) {
|
||||
prefix = 'data-';
|
||||
namePart = name.substring('Data: '.length);
|
||||
}
|
||||
|
||||
// Convert to lowercase and replace special chars
|
||||
const filename = namePart
|
||||
.toLowerCase()
|
||||
.replace(/\./g, '') // Remove dots
|
||||
.replace(/\s+/g, '-') // Spaces to hyphens
|
||||
.replace(/[()]/g, '') // Remove parentheses
|
||||
.replace(/\//g, '-') // Slashes to hyphens
|
||||
.replace(/-+/g, '-') // Collapse multiple hyphens
|
||||
.replace(/^-|-$/g, ''); // Trim hyphens from start/end
|
||||
|
||||
return prefix + filename + '.md';
|
||||
}
|
||||
|
||||
/**
|
||||
* Reconstruct the full prompt content from pieces and identifiers
|
||||
*/
|
||||
function reconstructPrompt(prompt) {
|
||||
if (prompt.pieces.length === 0) return '';
|
||||
if (prompt.pieces.length === 1) return prompt.pieces[0];
|
||||
|
||||
let result = '';
|
||||
let identifierIndex = 0;
|
||||
|
||||
for (let i = 0; i < prompt.pieces.length; i++) {
|
||||
result += prompt.pieces[i];
|
||||
|
||||
// Add variable name (pieces already contain ${ and } delimiters)
|
||||
if (i < prompt.pieces.length - 1 && identifierIndex < prompt.identifiers.length) {
|
||||
const identifierId = prompt.identifiers[identifierIndex].toString();
|
||||
const variableName = prompt.identifierMap[identifierId];
|
||||
if (variableName) {
|
||||
result += variableName;
|
||||
}
|
||||
identifierIndex++;
|
||||
}
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
* Create markdown file content with HTML comment metadata
|
||||
*/
|
||||
function createMarkdownContent(prompt, reconstructedContent) {
|
||||
const variables = Object.values(prompt.identifierMap || {});
|
||||
|
||||
let content = '<!--\n';
|
||||
content += `name: '${prompt.name}'\n`;
|
||||
content += `description: ${prompt.description.includes('\n') ? '>\n ' + prompt.description.replace(/\n/g, '\n ') : prompt.description}\n`;
|
||||
content += `ccVersion: ${prompt.version}\n`;
|
||||
|
||||
if (variables.length > 0) {
|
||||
content += 'variables:\n';
|
||||
variables.forEach(varName => {
|
||||
content += ` - ${varName}\n`;
|
||||
});
|
||||
}
|
||||
|
||||
content += '-->\n';
|
||||
content += reconstructedContent;
|
||||
|
||||
// Ensure file ends with newline
|
||||
if (!content.endsWith('\n')) {
|
||||
content += '\n';
|
||||
}
|
||||
|
||||
return content;
|
||||
}
|
||||
|
||||
/**
|
||||
* Parse existing markdown file to extract metadata
|
||||
*/
|
||||
function parseMarkdownFile(filepath) {
|
||||
try {
|
||||
const content = readFileSync(filepath, 'utf-8');
|
||||
const commentMatch = content.match(/<!--\n([\s\S]*?)\n-->/);
|
||||
if (!commentMatch) return null;
|
||||
|
||||
const metadataSection = commentMatch[1];
|
||||
const nameMatch = metadataSection.match(/name: '(.+)'/);
|
||||
const descMatch = metadataSection.match(/description: (.+?)(?=\nccVersion:)/s);
|
||||
|
||||
return {
|
||||
name: nameMatch ? nameMatch[1] : null,
|
||||
description: descMatch ? descMatch[1].replace(/>\n\s+/g, '').trim() : null,
|
||||
fullContent: content
|
||||
};
|
||||
} catch (err) {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Categorize prompts based on their name
|
||||
*/
|
||||
function categorizePrompt(name) {
|
||||
if (name.startsWith('Agent Prompt: ')) {
|
||||
const namePart = name.substring('Agent Prompt: '.length);
|
||||
// Sub-categorize agent prompts
|
||||
if (['Explore', 'Plan mode (enhanced)', 'Task tool'].some(sub => namePart.startsWith(sub))) {
|
||||
return { category: 'Agent Prompts', subcategory: 'Sub-agents' };
|
||||
} else if (['Agent creation architect', 'CLAUDE.md creation', 'Status line setup'].some(sub => namePart.includes(sub))) {
|
||||
return { category: 'Agent Prompts', subcategory: 'Creation Assistants' };
|
||||
} else if (namePart.includes('slash command') || namePart.startsWith('/')) {
|
||||
return { category: 'Agent Prompts', subcategory: 'Slash commands' };
|
||||
} else {
|
||||
return { category: 'Agent Prompts', subcategory: 'Utilities' };
|
||||
}
|
||||
} else if (name.startsWith('System Prompt: ')) {
|
||||
return { category: 'System Prompt', subcategory: null };
|
||||
} else if (name.startsWith('System Reminder: ')) {
|
||||
return { category: 'System Reminders', subcategory: null };
|
||||
} else if (name.startsWith('Tool Description: ')) {
|
||||
// Check for "additional notes" subcategory
|
||||
if (name.includes('(') && name.includes(')')) {
|
||||
return { category: 'Builtin Tool Descriptions', subcategory: 'Additional notes for some Tool Descriptions' };
|
||||
}
|
||||
return { category: 'Builtin Tool Descriptions', subcategory: null };
|
||||
} else if (name.startsWith('Data: ')) {
|
||||
return { category: 'Data', subcategory: null };
|
||||
}
|
||||
|
||||
return { category: 'Other', subcategory: null };
|
||||
}
|
||||
|
||||
/**
|
||||
* Update or create README entry for a prompt
|
||||
*/
|
||||
function createReadmeEntry(prompt, filename, tokens, isBold = false) {
|
||||
const link = isBold ? `[**${prompt.name}**]` : `[${prompt.name}]`;
|
||||
const path = `./system-prompts/${filename}`;
|
||||
const tokenCount = `(**${tokens}** tks)`;
|
||||
const description = prompt.description.replace(/\n\s+/g, ' ').trim();
|
||||
|
||||
return `- ${link}(${path}) ${tokenCount} - ${description}.`;
|
||||
}
|
||||
|
||||
/**
|
||||
* Main update function
|
||||
*/
|
||||
async function updateFromJSON(jsonPath) {
|
||||
console.log(`Reading JSON from: ${jsonPath}`);
|
||||
const jsonData = JSON.parse(readFileSync(jsonPath, 'utf-8'));
|
||||
|
||||
console.log(`Version: ${jsonData.version}`);
|
||||
console.log(`Prompts count: ${jsonData.prompts.length}`);
|
||||
|
||||
// Track all prompts by filename
|
||||
const promptsByFilename = new Map();
|
||||
const changedPrompts = new Set();
|
||||
const newPrompts = new Set();
|
||||
const promptsToCount = [];
|
||||
|
||||
// First pass: Process files and identify what needs token counting
|
||||
for (const prompt of jsonData.prompts) {
|
||||
const filename = nameToFilename(prompt.name);
|
||||
const filepath = join(SYSTEM_PROMPTS_DIR, filename);
|
||||
const reconstructedContent = reconstructPrompt(prompt);
|
||||
const newMarkdownContent = createMarkdownContent(prompt, reconstructedContent);
|
||||
|
||||
// Check if file exists and compare
|
||||
const existingFile = parseMarkdownFile(filepath);
|
||||
|
||||
if (existingFile) {
|
||||
// Compare content
|
||||
if (existingFile.fullContent.trim() !== newMarkdownContent.trim()) {
|
||||
console.log(`⚠️ Changed: ${filename}`);
|
||||
unlinkSync(filepath); // Delete old file
|
||||
writeFileSync(filepath, newMarkdownContent);
|
||||
changedPrompts.add(filename);
|
||||
}
|
||||
} else {
|
||||
console.log(`✨ New: ${filename}`);
|
||||
writeFileSync(filepath, newMarkdownContent);
|
||||
newPrompts.add(filename);
|
||||
}
|
||||
|
||||
// Store for token counting
|
||||
promptsToCount.push({ filename, content: reconstructedContent, prompt });
|
||||
}
|
||||
|
||||
// Batch count tokens for all prompts
|
||||
console.log('\n🔢 Counting tokens...');
|
||||
const tokenCounts = await countTokensBatch(promptsToCount);
|
||||
|
||||
// Store prompt info for README updates
|
||||
for (const { filename, prompt } of promptsToCount) {
|
||||
const tokens = tokenCounts.get(filename) || 0;
|
||||
promptsByFilename.set(filename, { prompt, tokens });
|
||||
}
|
||||
|
||||
// Find deleted prompts
|
||||
const allMdFiles = readdirSync(SYSTEM_PROMPTS_DIR).filter(f => f.endsWith('.md'));
|
||||
const deletedFiles = allMdFiles.filter(f => !promptsByFilename.has(f));
|
||||
|
||||
if (deletedFiles.length > 0) {
|
||||
console.log('\n🗑️ Deleting removed prompts:');
|
||||
deletedFiles.forEach(f => {
|
||||
console.log(` - ${f}`);
|
||||
unlinkSync(join(SYSTEM_PROMPTS_DIR, f));
|
||||
});
|
||||
}
|
||||
|
||||
// Update README
|
||||
console.log('\n📝 Updating README.md...');
|
||||
updateReadme(promptsByFilename, jsonData.version);
|
||||
|
||||
console.log('\n✅ Update complete!');
|
||||
console.log(` New: ${newPrompts.size}`);
|
||||
console.log(` Changed: ${changedPrompts.size}`);
|
||||
console.log(` Deleted: ${deletedFiles.length}`);
|
||||
}
|
||||
|
||||
/**
|
||||
* Update README.md with new prompt information
|
||||
*/
|
||||
function updateReadme(promptsByFilename, version) {
|
||||
let readme = readFileSync(README_PATH, 'utf-8');
|
||||
const lines = readme.split('\n');
|
||||
|
||||
// Update version in header
|
||||
lines[2] = `This repository contains an up-to-date list of all Claude Code's various system prompts and their associated token counts as of ${version}.`;
|
||||
|
||||
// Organize prompts by category
|
||||
const categories = {
|
||||
'Agent Prompts': {
|
||||
'Sub-agents': [],
|
||||
'Creation Assistants': [],
|
||||
'Slash commands': [],
|
||||
'Utilities': []
|
||||
},
|
||||
'System Prompt': { 'main': [] },
|
||||
'System Reminders': { 'main': [] },
|
||||
'Builtin Tool Descriptions': {
|
||||
'main': [],
|
||||
'Additional notes for some Tool Descriptions': []
|
||||
},
|
||||
'Data': { 'main': [] }
|
||||
};
|
||||
|
||||
// Categorize all prompts
|
||||
for (const [filename, { prompt, tokens }] of promptsByFilename) {
|
||||
const { category, subcategory } = categorizePrompt(prompt.name);
|
||||
|
||||
// Special handling for bold main system prompt
|
||||
const isBold = prompt.name === 'System Prompt: Main system prompt';
|
||||
const entry = createReadmeEntry(prompt, filename, tokens, isBold);
|
||||
|
||||
if (category === 'Agent Prompts') {
|
||||
categories['Agent Prompts'][subcategory].push(entry);
|
||||
} else if (category === 'System Prompt') {
|
||||
categories['System Prompt']['main'].push(entry);
|
||||
} else if (category === 'System Reminders') {
|
||||
categories['System Reminders']['main'].push(entry);
|
||||
} else if (category === 'Builtin Tool Descriptions') {
|
||||
const subcat = subcategory || 'main';
|
||||
categories['Builtin Tool Descriptions'][subcat].push(entry);
|
||||
} else if (category === 'Data') {
|
||||
categories['Data']['main'].push(entry);
|
||||
}
|
||||
}
|
||||
|
||||
// Sort entries alphabetically within each category
|
||||
for (const category of Object.values(categories)) {
|
||||
for (const subcategory of Object.values(category)) {
|
||||
if (Array.isArray(subcategory)) {
|
||||
subcategory.sort();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Rebuild README sections
|
||||
const newLines = [];
|
||||
let i = 0;
|
||||
|
||||
// Copy everything up to "### Agent Prompts"
|
||||
while (i < lines.length && !lines[i].startsWith('### Agent Prompts')) {
|
||||
newLines.push(lines[i]);
|
||||
i++;
|
||||
}
|
||||
|
||||
// Agent Prompts section
|
||||
newLines.push('### Agent Prompts');
|
||||
newLines.push('');
|
||||
newLines.push('Sub-agents and utilities.');
|
||||
newLines.push('');
|
||||
newLines.push('#### Sub-agents');
|
||||
newLines.push('');
|
||||
newLines.push(...categories['Agent Prompts']['Sub-agents']);
|
||||
newLines.push('');
|
||||
newLines.push('### Creation Assistants');
|
||||
newLines.push('');
|
||||
newLines.push(...categories['Agent Prompts']['Creation Assistants']);
|
||||
newLines.push('');
|
||||
newLines.push('### Slash commands');
|
||||
newLines.push('');
|
||||
newLines.push(...categories['Agent Prompts']['Slash commands']);
|
||||
newLines.push('');
|
||||
newLines.push('### Utilities');
|
||||
newLines.push('');
|
||||
newLines.push(...categories['Agent Prompts']['Utilities']);
|
||||
newLines.push('');
|
||||
|
||||
// Data section (commented out if has entries)
|
||||
if (categories['Data']['main'].length > 0) {
|
||||
newLines.push('<!--');
|
||||
newLines.push('### Data');
|
||||
newLines.push('');
|
||||
newLines.push('Misc large strings.');
|
||||
newLines.push('');
|
||||
newLines.push(...categories['Data']['main']);
|
||||
newLines.push('-->');
|
||||
newLines.push('');
|
||||
}
|
||||
|
||||
// System Prompt section
|
||||
newLines.push('### System Prompt');
|
||||
newLines.push('');
|
||||
newLines.push('Parts of the main system prompt.');
|
||||
newLines.push('');
|
||||
newLines.push(...categories['System Prompt']['main']);
|
||||
newLines.push('');
|
||||
|
||||
// System Reminders section
|
||||
newLines.push('### System Reminders');
|
||||
newLines.push('');
|
||||
newLines.push('Text for large system reminders.');
|
||||
newLines.push('');
|
||||
newLines.push('> [!NOTE]');
|
||||
newLines.push('> Note that we\'re planning to add a **system reminder creator/editor** to [tweakcc](https://github.com/Piebald-AI/tweakcc); :+1: [this issue](https://github.com/Piebald-AI/tweakcc/issues/113) if you\'re interested in that idea.');
|
||||
newLines.push('');
|
||||
newLines.push(...categories['System Reminders']['main']);
|
||||
newLines.push('');
|
||||
|
||||
// Builtin Tool Descriptions section
|
||||
newLines.push('### Builtin Tool Descriptions');
|
||||
newLines.push('');
|
||||
newLines.push(...categories['Builtin Tool Descriptions']['main']);
|
||||
newLines.push('');
|
||||
newLines.push('**Additional notes for some Tool Desscriptions**');
|
||||
newLines.push('');
|
||||
newLines.push(...categories['Builtin Tool Descriptions']['Additional notes for some Tool Descriptions']);
|
||||
newLines.push('');
|
||||
|
||||
// Write updated README
|
||||
writeFileSync(README_PATH, newLines.join('\n'));
|
||||
}
|
||||
|
||||
// Main execution
|
||||
const args = process.argv.slice(2);
|
||||
if (args.length === 0) {
|
||||
console.error('Usage: node updatePrompts.js <path-to-prompts.json>');
|
||||
console.error('Example: node updatePrompts.js /path/to/tweakcc/data/prompts/prompts-2.0.44.json');
|
||||
process.exit(1);
|
||||
}
|
||||
|
||||
const jsonPath = args[0];
|
||||
await updateFromJSON(jsonPath);
|
||||
@ -1,8 +1,6 @@
|
||||
<!--
|
||||
name: 'Agent Prompt: CLAUDE.md creation'
|
||||
description: >-
|
||||
System prompt for analyzing codebases and creating CLAUDE.md documentation
|
||||
files
|
||||
description: System prompt for analyzing codebases and creating CLAUDE.md documentation files
|
||||
ccVersion: 2.0.14
|
||||
-->
|
||||
Please analyze this codebase and create a CLAUDE.md file, which will be given to future instances of Claude Code to operate in this repository.
|
||||
|
||||
@ -1,8 +1,6 @@
|
||||
<!--
|
||||
name: 'Agent Prompt: Prompt Hook execution'
|
||||
description: >-
|
||||
Prompt given to Claude when acting evaluating whether to pass or fail a prompt
|
||||
hook.
|
||||
description: Prompt given to Claude when acting evaluating whether to pass or fail a prompt hook.
|
||||
ccVersion: 2.0.41
|
||||
-->
|
||||
You are evaluating a hook in Claude Code.
|
||||
|
||||
@ -1,8 +1,6 @@
|
||||
<!--
|
||||
name: 'Agent Prompt: /security-review slash'
|
||||
description: >-
|
||||
Comprehensive security review prompt for analyzing code changes with focus on
|
||||
exploitable vulnerabilities
|
||||
description: Comprehensive security review prompt for analyzing code changes with focus on exploitable vulnerabilities
|
||||
ccVersion: 2.0.14
|
||||
-->
|
||||
---
|
||||
|
||||
@ -1,8 +1,6 @@
|
||||
<!--
|
||||
name: 'Agent Prompt: Status line setup'
|
||||
description: >-
|
||||
System prompt for the statusline-setup agent that configures status line
|
||||
display
|
||||
description: System prompt for the statusline-setup agent that configures status line display
|
||||
ccVersion: 2.0.14
|
||||
-->
|
||||
You are a status line setup agent for Claude Code. Your job is to create or update the statusLine command in the user's Claude Code settings.
|
||||
|
||||
@ -1,8 +1,6 @@
|
||||
<!--
|
||||
name: 'Agent Prompt: WebFetch summarizer'
|
||||
description: >-
|
||||
Prompt for agent that summarizes verbose output from WebFetch for the main
|
||||
model
|
||||
description: Prompt for agent that summarizes verbose output from WebFetch for the main model
|
||||
ccVersion: 2.0.14
|
||||
variables:
|
||||
- WEB_CONTENT
|
||||
|
||||
@ -1,8 +1,6 @@
|
||||
<!--
|
||||
name: 'Data: GitHub Actions workflow for @claude mentions'
|
||||
description: >-
|
||||
GitHub Actions workflow template for triggering Claude Code via @claude
|
||||
mentions
|
||||
description: GitHub Actions workflow template for triggering Claude Code via @claude mentions
|
||||
ccVersion: 2.0.14
|
||||
-->
|
||||
name: Claude Code
|
||||
@ -1,8 +1,6 @@
|
||||
<!--
|
||||
name: 'Data: GitHub Actions workflow for automated code review (beta)'
|
||||
description: >-
|
||||
GitHub Actions workflow template for automated Claude Code reviews using
|
||||
direct_prompt
|
||||
description: GitHub Actions workflow template for automated Claude Code reviews using direct_prompt
|
||||
ccVersion: 2.0.14
|
||||
-->
|
||||
name: Claude Code Review
|
||||
|
||||
@ -1,8 +1,6 @@
|
||||
<!--
|
||||
name: 'System Prompt: Learning mode'
|
||||
description: >-
|
||||
System Prompt: Main system prompt for learning mode with human collaboration
|
||||
instructions
|
||||
description: System Prompt: Main system prompt for learning mode with human collaboration instructions
|
||||
ccVersion: 2.0.14
|
||||
variables:
|
||||
- ICONS_OBJECT
|
||||
|
||||
@ -1,8 +1,6 @@
|
||||
<!--
|
||||
name: 'System Prompt: Main system prompt'
|
||||
description: >-
|
||||
Core system prompt for Claude Code defining behavior, tone, and tool usage
|
||||
policies
|
||||
description: Core system prompt for Claude Code defining behavior, tone, and tool usage policies
|
||||
ccVersion: 2.0.43
|
||||
variables:
|
||||
- OUTPUT_STYLE_CONFIG
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
<!--
|
||||
name: 'Tool Description: Bash'
|
||||
description: 'Description for the Bash tool, which allows Claude to run shell commands'
|
||||
description: Description for the Bash tool, which allows Claude to run shell commands
|
||||
ccVersion: 2.0.25
|
||||
variables:
|
||||
- CUSTOM_TIMEOUT_MS
|
||||
|
||||
@ -1,8 +1,6 @@
|
||||
<!--
|
||||
name: 'Tool Description: ExitPlanMode v2'
|
||||
description: >-
|
||||
V2 description for the ExitPlanMode tool, which presents a plan dialog for the
|
||||
user to approve
|
||||
description: V2 description for the ExitPlanMode tool, which presents a plan dialog for the user to approve
|
||||
ccVersion: 2.0.43
|
||||
variables:
|
||||
- ASK_USER_QUESTION_TOOL_NAME
|
||||
|
||||
@ -1,8 +1,6 @@
|
||||
<!--
|
||||
name: 'Tool Description: ExitPlanMode'
|
||||
description: >-
|
||||
Description for the ExitPlanMode tool, which presents a plan dialog for the
|
||||
user to approve
|
||||
description: Description for the ExitPlanMode tool, which presents a plan dialog for the user to approve
|
||||
ccVersion: 2.0.30
|
||||
variables:
|
||||
- ASK_USER_QUESTION_TOOL
|
||||
|
||||
@ -7,6 +7,7 @@ variables:
|
||||
- AGENT_TYPE_REGISTRY_STRING
|
||||
- READ_TOOL
|
||||
- GLOB_TOOL
|
||||
- TASK_TOOL
|
||||
- WRITE_TOOL
|
||||
-->
|
||||
Launch a new agent to handle complex, multi-step tasks autonomously.
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user