feat: add Claude Code agent configuration and registration tools
- Add agent symlinks in .claude/agents/ directory - Include agent-project-management.md and test-agent.md - Add tools/register-agents-claude.py for agent registration - Enable specialized agents for project management and testing 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
106
tools/register-agents-claude.py
Executable file
106
tools/register-agents-claude.py
Executable file
@@ -0,0 +1,106 @@
|
||||
#!/usr/bin/env python3
|
||||
"""Bridge script to register kaizen-agentic agents with Claude Code using lazy loading."""
|
||||
|
||||
import json
|
||||
import sys
|
||||
from pathlib import Path
|
||||
|
||||
# Add the kaizen-agentic source to path
|
||||
sys.path.insert(0, str(Path(__file__).parent.parent / "capabilities" / "kaizen-agentic" / "src"))
|
||||
|
||||
from kaizen_agentic.registry import AgentRegistry
|
||||
|
||||
|
||||
def get_agent_file_path(agent: object, agents_dir: Path) -> str:
|
||||
"""Get relative path to agent file for lazy loading."""
|
||||
return str(agent.file_path.relative_to(agents_dir.parent))
|
||||
|
||||
|
||||
def generate_claude_agent_configs(agents_dir: Path) -> dict:
|
||||
"""Generate Claude Code agent configurations with metadata only for lazy loading."""
|
||||
registry = AgentRegistry(agents_dir)
|
||||
agents = registry.list_agents()
|
||||
|
||||
claude_agents = {}
|
||||
|
||||
for agent in agents:
|
||||
# Map agent names for Claude Code compatibility
|
||||
claude_name = agent.name.replace('-', '_')
|
||||
if claude_name == "changelog_keeper":
|
||||
claude_name = "keepaChangelog"
|
||||
elif claude_name == "todo_keeper":
|
||||
claude_name = "keepaTodofile"
|
||||
elif claude_name == "contributing_keeper":
|
||||
claude_name = "keepaContributingfile"
|
||||
|
||||
# Store only metadata - instructions will be loaded lazily when needed
|
||||
claude_agents[claude_name] = {
|
||||
"description": agent.description,
|
||||
"category": agent.category.value,
|
||||
"dependencies": list(agent.dependencies),
|
||||
"tools": ["Read", "Write", "Edit", "Glob", "Grep"], # Standard tools
|
||||
"original_name": agent.name,
|
||||
"file_path": get_agent_file_path(agent, agents_dir)
|
||||
}
|
||||
|
||||
return claude_agents
|
||||
|
||||
|
||||
def update_claude_settings(claude_agents: dict, settings_file: Path):
|
||||
"""Update Claude Code settings with agent configurations."""
|
||||
# Load existing settings
|
||||
if settings_file.exists():
|
||||
with open(settings_file, 'r') as f:
|
||||
settings = json.load(f)
|
||||
else:
|
||||
settings = {}
|
||||
|
||||
# Add agents section
|
||||
if "agents" not in settings:
|
||||
settings["agents"] = {}
|
||||
|
||||
# Update with new agent configurations
|
||||
settings["agents"].update(claude_agents)
|
||||
|
||||
# Write updated settings
|
||||
with open(settings_file, 'w') as f:
|
||||
json.dump(settings, f, indent=2)
|
||||
|
||||
return len(claude_agents)
|
||||
|
||||
|
||||
def main():
|
||||
"""Main registration process."""
|
||||
project_root = Path(__file__).parent.parent
|
||||
agents_dir = project_root / "agents"
|
||||
claude_settings = project_root / ".claude" / "settings.local.json"
|
||||
|
||||
if not agents_dir.exists():
|
||||
print(f"Error: Agents directory not found: {agents_dir}")
|
||||
sys.exit(1)
|
||||
|
||||
print("Loading agents from kaizen-agentic registry...")
|
||||
try:
|
||||
claude_agents = generate_claude_agent_configs(agents_dir)
|
||||
print(f"Found {len(claude_agents)} agents to register")
|
||||
|
||||
# Show what will be registered
|
||||
for name, config in claude_agents.items():
|
||||
print(f" • {name}: {config['description'][:60]}... (from {config['file_path']})")
|
||||
|
||||
print(f"\nUpdating Claude Code settings: {claude_settings}")
|
||||
count = update_claude_settings(claude_agents, claude_settings)
|
||||
|
||||
print(f"✅ Successfully registered {count} agents with Claude Code (metadata only)")
|
||||
print("📄 Agent instructions will be loaded lazily when needed")
|
||||
print("\nAvailable agents for Task tool:")
|
||||
for name in sorted(claude_agents.keys()):
|
||||
print(f" - {name}")
|
||||
|
||||
except Exception as e:
|
||||
print(f"Error: {e}")
|
||||
sys.exit(1)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
Reference in New Issue
Block a user