
Tool Creator
- 53 installs
- 36 repo stars
- Updated July 14, 2026
- oimiragieo/agent-studio
Helps with ai & agent building tasks.
About
tool-creator is a Claude Code skill for ai & agent building. It helps solo builders move faster with AI-assisted development.
- tool-creator
- AI & Agent Building
- AI-coding skill
Tool Creator by the numbers
- 53 all-time installs (skills.sh)
- Ranked #6,979 of 16,546 AI & Agent Building skills by installs in the Skillselion catalog
- Data as of Aug 4, 2026 (Skillselion catalog sync)
npx skills add https://github.com/oimiragieo/agent-studio --skill tool-creatorAdd your badge
Show developers this skill is listed on Skillselion. Paste this into your README.
| Installs | 53 |
|---|---|
| repo stars | ★ 36 |
| Last updated | July 14, 2026 |
| Repository | oimiragieo/agent-studio ↗ |
What it does
Helps with ai & agent building tasks.
Files
Tool Creator
Create executable tool files in .claude/tools/<category>/. Tools are organized into categories like cli, analysis, validation, integrations, etc.
Step 0: Check for Existing Tool
Before creating, check if tool already exists:
find .claude/tools/ -name "<tool-name>.*" -type fIf EXISTS → use Read to inspect the current tool file, then Edit to apply changes directly. Run the post-creation integration steps (Step 4) after updating.
If NEW → continue with Step 0.1.
Step 0.1: Smart Duplicate Detection (MANDATORY)
Before proceeding with creation, run the 3-layer duplicate check:
const { checkDuplicate } = require('.claude/lib/creation/duplicate-detector.cjs');
const result = checkDuplicate({
artifactType: 'tool',
name: proposedName,
description: proposedDescription,
keywords: proposedKeywords || [],
});Handle results:
- `EXACT_MATCH`: Stop creation. Route to
tool-updaterskill instead:Skill({ skill: 'tool-updater' }) - `REGISTRY_MATCH`: Warn user — artifact is registered but file may be missing. Investigate before creating. Ask user to confirm.
- `SIMILAR_FOUND`: Display candidates with scores. Ask user: "Similar artifact(s) exist. Continue with new creation or update existing?"
- `NO_MATCH`: Proceed to next step.
Override: If user explicitly passes --force, skip this check entirely.
---
Step 0.5: Companion Check
Before proceeding with creation, run the ecosystem companion check:
1. Use companion-check.cjs from .claude/lib/creators/companion-check.cjs 2. Call checkCompanions("tool", "{tool-name}") to identify companion artifacts 3. Review the companion checklist — note which required/recommended companions are missing 4. Plan to create or verify missing companions after this artifact is complete 5. Include companion findings in post-creation integration notes
This step is informational (does not block creation) but ensures the full artifact ecosystem is considered.
When to Use
- Creating reusable command-line utilities
- Building analysis or validation scripts
- Implementing framework automation tools
- Adding workflow integration utilities
Tool File Format
Tools are CommonJS or ESM modules with:
#!/usr/bin/env node
/**
* Tool Name - Brief description
*
* Usage:
* node .claude/tools/<category>/<tool-name>.cjs [options]
*
* Options:
* --help Show help
* --option Description
*/
const main = async () => {
// Tool implementation
};
if (require.main === module) {
main().catch(console.error);
}
module.exports = { main };Tool Categories
| Category | Purpose | Examples |
|---|---|---|
cli | Command-line utilities | validators, formatters |
analysis | Code analysis tools | complexity, dependencies |
validation | Validation scripts | schema, lint |
integrations | External integration tools | API clients, webhooks |
maintenance | Framework maintenance | cleanup, migration |
optimization | Performance optimization | indexing, caching |
runtime | Runtime utilities | config readers, loaders |
visualization | Diagram and graph generation | mermaid, graphviz |
workflow | Workflow automation | task runners, orchestrators |
gates | Quality gates and checks | coverage, security |
context | Context management | compression, handoff |
Creation Workflow
Step 1: Validate Inputs
// Validate tool name (lowercase, hyphens, no spaces)
const toolName = args.name.toLowerCase().replace(/[^a-z0-9-]/g, '-');
// Validate category exists
const validCategories = [
'cli',
'analysis',
'validation',
'integrations',
'maintenance',
'optimization',
'runtime',
'visualization',
'workflow',
'gates',
'context',
];
if (!validCategories.includes(args.category)) {
throw new Error(`Invalid category. Must be one of: ${validCategories.join(', ')}`);
}Step 2: Create Tool File
const toolPath = `.claude/tools/${args.category}/${toolName}.cjs`;
// Create tool directory if it doesn't exist
await mkdir(`.claude/tools/${args.category}`, { recursive: true });
// Generate tool content
const content = `#!/usr/bin/env node
/**
* ${toolName.replace(/-/g, ' ').replace(/\b\w/g, l => l.toUpperCase())} - ${args.description || 'Tool description'}
*
* Usage:
* node .claude/tools/${args.category}/${toolName}.cjs [options]
*
* Options:
* --help Show this help message
*/
${args.implementation}
if (require.main === module) {
main().catch(console.error);
}
module.exports = { main };
`;
await writeFile(toolPath, content);
// Make executable (Unix-like systems)
if (process.platform !== 'win32') {
await chmod(toolPath, '755');
}Step 3: Update Tool Catalog
const catalogPath = '.claude/context/artifacts/catalogs/tool-catalog.md';
// Add entry to catalog under appropriate category
const newEntry = `| ${toolName} | ${args.description} | .claude/tools/${args.category}/${toolName}.cjs | active |`;
// Insert into catalog preserving category structureStep 4: Run Post-Creation Integration
const {
runIntegrationChecklist,
queueCrossCreatorReview,
} = require('.claude/lib/creators/creator-commons.cjs');
await runIntegrationChecklist('tool', toolPath);
await queueCrossCreatorReview('tool', toolPath, {
artifactName: toolName,
createdBy: 'tool-creator',
category: args.category,
});Post-Creation Integration
After tool creation, run integration checklist:
const {
runIntegrationChecklist,
queueCrossCreatorReview,
} = require('.claude/lib/creators/creator-commons.cjs');
// 1. Run integration checklist
const result = await runIntegrationChecklist('tool', '.claude/tools/<category>/<tool-name>.cjs');
// 2. Queue cross-creator review
await queueCrossCreatorReview('tool', '.claude/tools/<category>/<tool-name>.cjs', {
artifactName: '<tool-name>',
createdBy: 'tool-creator',
category: '<category>',
});
// 3. Review impact report
// Check result.mustHave for failures - address before marking completeIntegration verification:
- [ ] Tool added to tool-catalog.md under correct category
- [ ] Tool file is executable (Unix) or runnable (Windows)
- [ ] Tool has help text and usage examples
- [ ] Tool passes basic smoke test
Usage Examples
Create Validation Tool
Skill({
skill: 'tool-creator',
args: `--name schema-validator --category validation --implementation "
const validateSchema = async () => {
console.log('Validating schema...');
};
const main = async () => {
await validateSchema();
};
"`,
});Create Analysis Tool
Skill({
skill: 'tool-creator',
args: `--name complexity-analyzer --category analysis --implementation "
const analyzeComplexity = async (filePath) => {
console.log('Analyzing complexity for:', filePath);
};
const main = async () => {
const [,, filePath] = process.argv;
await analyzeComplexity(filePath);
};
"`,
});Related Skills
skill-creator- Create skills that invoke toolshook-creator- Create pre/post hooks that wrap tool execution
Iron Laws
1. Every artifact MUST have a companion schema — Tools without a schema have no contract; consumers cannot validate inputs/outputs. Create a JSON schema in .claude/schemas/ for the tool's CLI interface. 2. Every artifact MUST be wired to at least one agent — A tool not assigned to any agent is never invoked. Assign the tool to relevant agents via their tools: frontmatter array. 3. Every artifact MUST be indexed in its catalog — Tools not in tool-catalog.md are invisible to discovery. Add an entry to .claude/context/artifacts/catalogs/tool-catalog.md under the correct category. 4. Every artifact MUST pass integration validation — Run node .claude/tools/cli/validate-integration.cjs <tool-path> before marking creation complete. A tool that fails validation has broken references. 5. Every artifact MUST record a memory entry — Write the tool creation pattern, decisions, and any issues to .claude/context/memory/ (learnings.md, decisions.md, issues.md). Without memory, the creation is invisible to future sessions.
Memory Protocol (MANDATORY)
Before starting: Read .claude/context/memory/learnings.md
After completing:
- New tool pattern →
.claude/context/memory/learnings.md - Tool creation issue →
.claude/context/memory/issues.md - Category decision →
.claude/context/memory/decisions.md
ASSUME INTERRUPTION: If it's not in memory, it didn't happen.
Cross-Reference: Creator Ecosystem
This skill is part of the Creator Ecosystem. When research uncovers gaps, trigger the appropriate companion creator:
| Gap Discovered | Required Artifact | Creator to Invoke | When |
|---|---|---|---|
| Domain knowledge needs a reusable skill | skill | Skill({ skill: 'skill-creator' }) | Gap is a full skill domain |
| Existing skill has incomplete coverage | skill update | Skill({ skill: 'skill-updater' }) | Close skill exists but incomplete |
| Capability needs a dedicated agent | agent | Skill({ skill: 'agent-creator' }) | Agent to own the capability |
| Existing agent needs capability update | agent update | Skill({ skill: 'agent-updater' }) | Close agent exists but incomplete |
| Domain needs code/project scaffolding | template | Skill({ skill: 'template-creator' }) | Reusable code patterns needed |
| Behavior needs pre/post execution guards | hook | Skill({ skill: 'hook-creator' }) | Enforcement behavior required |
| Process needs multi-phase orchestration | workflow | Skill({ skill: 'workflow-creator' }) | Multi-step coordination needed |
| Artifact needs structured I/O validation | schema | Skill({ skill: 'schema-creator' }) | JSON schema for artifact I/O |
| User interaction needs a slash command | command | Skill({ skill: 'command-creator' }) | User-facing shortcut needed |
| Repeated logic needs a reusable CLI tool | tool | Skill({ skill: 'tool-creator' }) | CLI utility needed |
| Narrow/single-artifact capability only | inline | Document within this artifact only | Too specific to generalize |
---
Ecosystem Alignment Contract (MANDATORY)
This creator skill is part of a coordinated creator ecosystem. Any artifact created here must align with and validate against related creators:
agent-creatorfor ownership and execution pathsskill-creatorfor capability packaging and assignmenttool-creatorfor executable automation surfaceshook-creatorfor enforcement and guardrailsrule-creatorandsemgrep-rule-creatorfor policy and static checkstemplate-creatorfor standardized scaffoldsworkflow-creatorfor orchestration and phase gatingcommand-creatorfor user/operator command UX
Cross-Creator Handshake (Required)
Before completion, verify all relevant handshakes:
1. Artifact route exists in .claude/CLAUDE.md and related routing docs. 2. Discovery/registry entries are updated (catalog/index/registry as applicable). 3. Companion artifacts are created or explicitly waived with reason. 4. validate-integration.cjs passes for the created artifact. 5. Skill index is regenerated when skill metadata changes.
Research Gate (Exa + arXiv — BOTH MANDATORY)
For new patterns, templates, or workflows, research is mandatory:
1. Use Exa for implementation and ecosystem patterns:
mcp__Exa__web_search_exa({ query: '<topic> 2025 best practices' })mcp__Exa__get_code_context_exa({ query: '<topic> implementation examples' })
2. Search arXiv for academic research (mandatory for AI/ML, agents, evaluation, orchestration, memory/RAG, security):
- Via Exa:
mcp__Exa__web_search_exa({ query: 'site:arxiv.org <topic> 2024 2025' }) - Direct API:
WebFetch({ url: 'https://arxiv.org/search/?query=<topic>&searchtype=all&start=0' })
3. Record decisions, constraints, and non-goals in artifact references/docs. 4. Keep updates minimal and avoid overengineering.
arXiv is mandatory (not fallback) when topic involves: AI agents, LLM evaluation, orchestration, memory/RAG, security, static analysis, or any emerging methodology.
Regression-Safe Delivery
- Follow strict RED -> GREEN -> REFACTOR for behavior changes.
- Run targeted tests for changed modules.
- Run lint/format on changed files.
- Keep commits scoped by concern (logic/docs/generated artifacts).
Optional: Evaluation Quality Gate
Run the shared evaluation framework to verify tool quality:
node .claude/skills/skill-creator/scripts/eval-runner.cjs --skill tool-creatorGrader assertions for tool artifacts:
- `--help` response: Tool responds to
--help(or-h) with a usage summary including required/optional arguments and at least one example invocation - `shell: false` for child processes: Any
child_process.spawnorexecFilecall usesshell: falsewith array arguments (nevershell: trueper SE-security rules) - Graceful missing input handling: Tool exits with a non-zero code and a human-readable error message when required arguments are absent; no unhandled exceptions or crash dumps
- Catalog entry present: Tool is registered in
.claude/context/artifacts/catalogs/tool-catalog.mdwith category, description, and wiring status - Timeout safety: Long-running operations have explicit timeouts; no infinite loops on missing input
See .claude/skills/skill-creator/EVAL_WORKFLOW.md for full evaluation protocol and grader/analyzer agent usage.
Invoke the tool-creator skill and follow it exactly as presented to you
'use strict';
/**
* Post-execute hook for tool-creator
* Auto-generated by enterprise-bundle-scaffolder
*
* Records metrics after skill execution.
*/
function postExecute(_context) {
// Record execution metrics
return { ok: true, skill: 'tool-creator' };
}
module.exports = { postExecute };
'use strict';
/**
* Pre-execute hook for tool-creator
* Auto-generated by enterprise-bundle-scaffolder
*
* Validates inputs before skill execution.
*/
function preExecute(context) {
// Validate skill invocation context
if (!context || typeof context !== 'object') {
return { allow: true, message: 'tool-creator: no context to validate' };
}
return { allow: true };
}
module.exports = { preExecute };
tool-creator Research Requirements
Generated: 2026-02-28
Skill Description
Creates tool files for the Claude Code framework. Tools are executable utilities organized by category in .claude/tools/.
Research Areas
- Current best practices for tool-creator
- Industry standards and tooling
- Integration patterns
Source References
- To be populated by skill-updater research phase
tool-creator Rules
Purpose
Creates tool files for the Claude Code framework. Tools are executable utilities organized by category in .claude/tools/.
Best Practices
- Tools are CLI-executable scripts (.cjs or .mjs)
- Keep tools focused (single responsibility)
- Add help text and usage examples
- Include error handling
Integration Points
See SKILL.md for complete documentation.
{
"$schema": "http://json-schema.org/draft-07/schema#",
"title": "tool-creatorInput",
"description": "Input schema for Creates tool files for the Claude Code framework. Tools are executable utilities organized by category in .claude/tools/.",
"type": "object",
"additionalProperties": true,
"properties": {
"target": {
"type": "string",
"description": "Target file or path for the skill to operate on"
},
"options": {
"type": "object",
"description": "Additional options for skill execution",
"additionalProperties": true
}
}
}
{
"$schema": "http://json-schema.org/draft-07/schema#",
"title": "tool-creatorOutput",
"type": "object",
"additionalProperties": true,
"properties": {
"ok": {
"type": "boolean"
},
"summary": {
"type": "string"
}
}
}
#!/usr/bin/env node
'use strict';
const fs = require('node:fs');
const path = require('node:path');
function findProjectRoot() {
let dir = __dirname;
while (dir !== path.dirname(dir)) {
if (fs.existsSync(path.join(dir, '.claude'))) return dir;
dir = path.dirname(dir);
}
return process.cwd();
}
const PROJECT_ROOT = findProjectRoot();
const CLAUDE_DIR = path.join(PROJECT_ROOT, '.claude');
const TOOLS_DIR = path.join(CLAUDE_DIR, 'tools');
function parseArgs(argv) {
const options = {};
for (let i = 0; i < argv.length; i++) {
const arg = argv[i];
if (!arg.startsWith('--')) continue;
const key = arg.slice(2);
const next = argv[i + 1];
const hasValue = next && !next.startsWith('--');
options[key] = hasValue ? argv[++i] : true;
}
return options;
}
function updateToolCatalog(name, description, category) {
const catalogPath = path.join(CLAUDE_DIR, 'context', 'artifacts', 'catalogs', 'tool-catalog.md');
if (!fs.existsSync(catalogPath)) return;
const content = fs.readFileSync(catalogPath, 'utf8');
if (content.includes(name)) return;
const entry = `| ${name} | ${description} | .claude/tools/${category}/${name}.cjs | active |`;
// Heuristic insertion into table (very simplified)
fs.appendFileSync(catalogPath, `\n${entry}\n`, 'utf8');
}
function createTool(options) {
const name = String(options.name || '')
.trim()
.toLowerCase()
.replace(/[^a-z0-9-]/g, '-');
if (!name) throw new Error('Missing required --name');
const category = String(options.category || 'cli').trim();
const description = String(options.description || 'CLI utility').trim();
const implementation = String(options.implementation || '').trim();
const categoryDir = path.join(TOOLS_DIR, category);
const toolPath = path.join(categoryDir, `${name}.cjs`);
if (fs.existsSync(toolPath)) {
return { ok: true, status: 'exists', path: toolPath };
}
const content = `#!/usr/bin/env node
/**
* ${name.replace(/-/g, ' ').replace(/\b\w/g, l => l.toUpperCase())} - ${description}
*/
const main = async () => {
${implementation || '// Implementation here'}
};
if (require.main === module) {
main().catch(console.error);
}
module.exports = { main };
`;
if (!fs.existsSync(categoryDir)) fs.mkdirSync(categoryDir, { recursive: true });
fs.writeFileSync(toolPath, content, 'utf8');
// POST-CREATION INTEGRATION
try {
updateToolCatalog(name, description, category);
const learningsPath = path.join(CLAUDE_DIR, 'context', 'memory', 'learnings.md');
if (fs.existsSync(learningsPath)) {
fs.appendFileSync(
learningsPath,
`\n- Created new tool: ${category}/${name} (${new Date().toISOString().split('T')[0]})\n`,
'utf8'
);
}
} catch (err) {
console.error(`Warning: Integration partial: ${err.message}`);
}
return { ok: true, action: 'create', path: toolPath };
}
function main() {
const options = parseArgs(process.argv.slice(2));
if (options.help || Object.keys(options).length === 0) {
console.log(
'Tool Creator CLI\nUsage: --name <name> --category <cat> --implementation <code> [--description <desc>]'
);
return;
}
const result = createTool(options);
console.log(JSON.stringify(result, null, 2));
}
if (require.main === module) {
try {
main();
} catch (err) {
console.error(err.message);
process.exit(1);
}
}
tool-creator Implementation Template
Goal
- Define target outcome and acceptance criteria.
TDD
1. Red 2. Green 3. Refactor
Verification
- lint
- format
- targeted tests