UNPKG

aiwg

Version:

Cognitive architecture for AI-augmented software development with structured memory, ensemble validation, and closed-loop correction. FAIR-aligned artifacts, 84% cost reduction via human-in-the-loop, standards adopted by 100+ organizations.

333 lines (255 loc) 9.39 kB
# AgentSmith Custom agent generation with platform-aware deployment following the 10 Golden Rules. ## Overview AgentSmith generates custom agents that follow best practices from the Agent Design Bible and automatically deploys them to platform-specific locations with proper format transformations. ## Features - **Template-based generation**: Simple, Complex, Orchestrator, Validator - **10 Golden Rules compliance**: Automatic adherence to agent design principles - **Platform-aware deployment**: Transforms agents for Claude, Cursor, Codex, Factory, Windsurf, etc. - **Model tier selection**: Auto-selects appropriate model based on template - **Tool constraints**: Enforces minimal tool usage (0-3 tools max) - **Interactive mode**: Guided agent creation via prompts ## Templates | Template | Model | Tools | Use Case | |----------|-------|-------|----------| | `simple` | haiku | Read, Write | Single-purpose, focused tasks | | `complex` | sonnet | Read, Write, Grep | Analysis and decision-making | | `orchestrator` | opus | Task | Delegation and coordination (Task tool only) | | `validator` | sonnet | Read, Grep | Quality checks (read-only) | ## Usage ### Basic Generation ```typescript import { AgentGenerator } from './smiths/agentsmith/index.js'; const generator = new AgentGenerator(); const agent = await generator.generateAgent({ name: 'security-scanner', description: 'Scans code for security vulnerabilities', template: 'validator', platform: 'claude', projectPath: '/path/to/project', guidance: 'Expert in OWASP Top 10, SQL injection, XSS. Must flag high-risk patterns.', }); // Deploy to .claude/agents/ await generator.deployAgent(agent); ``` ### Custom Tools ```typescript const agent = await generator.generateAgent({ name: 'api-documenter', description: 'Generates API documentation from code', template: 'simple', platform: 'cursor', projectPath: '/path/to/project', tools: ['Read', 'Write'], // Override template defaults guidance: 'Parse function signatures, extract JSDoc comments, generate OpenAPI specs.', }); ``` ### Dry Run ```typescript const agent = await generator.generateAgent({ name: 'test-agent', description: 'Test agent', platform: 'claude', projectPath: '/path/to/project', dryRun: true, // Preview without writing files }); console.log(agent.content); // See generated content console.log(agent.path); // See where it would be deployed ``` ### List Templates ```typescript const templates = generator.listTemplates(); for (const { name, config } of templates) { console.log(`${name}: ${config.description}`); console.log(` Model: ${config.modelTier}`); console.log(` Tools: ${config.tools.join(', ')}`); console.log(` Max Tools: ${config.maxTools}`); } ``` ## 10 Golden Rules AgentSmith automatically enforces: 1. **Single Responsibility**: Focuses responsibilities (max 5) 2. **Minimal Tools**: 0-3 tools based on template 3. **Explicit I/O**: Generates clear input/output specs 4. **Grounding**: Includes verification steps 5. **Uncertainty**: Adds escalation workflow 6. **Context Scope**: Defines scope boundaries 7. **Recovery**: Includes error handling 8. **Model Tier**: Selects appropriate model 9. **Parallel Ready**: Safe for concurrent execution 10. **Observable**: Traceable output format ## Platform Transformations AgentSmith automatically transforms agents for each platform: ### Claude (.md with YAML frontmatter) ```markdown --- name: agent-name description: Agent description model: sonnet tools: Read, Write --- # Agent Title [Content] ``` ### Cursor (JSON) ```json { "name": "agent-name", "description": "Agent description", "prompt": "[Content]", "tools": ["read", "write"], "model": "sonnet" } ``` ### Codex (YAML with specific structure) ```yaml --- agent_name: agent-name description: Agent description capabilities: - read - write preferred_model: sonnet --- # System Instructions [Content] ``` ### Windsurf (Plain markdown) ```markdown ### agent-name > Agent description <capabilities> - Read - Write </capabilities> **Model**: sonnet [Content] ``` ## Guidance Format The `guidance` parameter accepts natural language. AgentSmith extracts: - **Expertise**: "expert in X", "knowledge of Y", "understands Z" - **Responsibilities**: "must X", "should Y", "responsible for Z" - **Examples**: "example: X" - **Output format**: "output format: X" Example: ```typescript guidance: ` Expert in GraphQL schema design and REST API conventions. Must validate endpoint naming, parameter types, and response structures. Should flag inconsistencies with OpenAPI 3.0 spec. Example: GET /users/:id should return 200 with user object. Output format: List of violations with severity and line numbers. ` ``` ## Deployment Paths | Platform | Default Path | |----------|--------------| | claude | `.claude/agents/` | | cursor | `.cursor/agents/` | | codex | `.codex/agents/` | | copilot | `.github/agents/` | | factory | `.factory/droids/` | | generic | `agents/` | | windsurf | `.windsurf/agents/` | ## Error Handling AgentSmith validates: - Agent name must be kebab-case - Description must be at least 10 characters - Custom tools cannot exceed template max (Golden Rule #2) - Platform must be valid - Project path must exist ## Integration with Model Selection AgentSmith uses model tiers (haiku, sonnet, opus) which map to actual models via the enhanced model selection system. Users can override: ```typescript const agent = await generator.generateAgent({ name: 'my-agent', description: 'Custom agent', template: 'simple', // Default: haiku model: 'sonnet', // Override: use sonnet instead platform: 'claude', projectPath: '/path/to/project', }); ``` ## Examples ### Security Validator ```typescript const securityAgent = await generator.generateAgent({ name: 'security-validator', description: 'Validates code security practices', template: 'validator', platform: 'claude', projectPath: '/my/project', category: 'security', version: '1.0.0', guidance: ` Expert in OWASP Top 10, secure coding practices, and common vulnerabilities. Must scan for SQL injection, XSS, CSRF, insecure deserialization. Should flag hardcoded secrets, weak crypto, and unsafe dependencies. Example: Detect "SELECT * FROM users WHERE id=" + userId as SQL injection risk. Output format: JSON report with severity (critical/high/medium/low), file, line, description. `, }); ``` ### Test Orchestrator ```typescript const testOrchestrator = await generator.generateAgent({ name: 'test-orchestrator', description: 'Coordinates comprehensive test suite execution', template: 'orchestrator', platform: 'factory', projectPath: '/my/project', category: 'testing', guidance: ` Expert in test strategy and parallel test execution. Must delegate to unit-test-runner, integration-test-runner, e2e-test-runner agents. Should synthesize coverage reports and failure summaries. Output format: Aggregated test results with pass/fail counts and coverage percentages. `, }); ``` ### Documentation Generator ```typescript const docAgent = await generator.generateAgent({ name: 'api-doc-generator', description: 'Generates API documentation from source code', template: 'complex', platform: 'cursor', projectPath: '/my/project', tools: ['Read', 'Write', 'Grep'], category: 'documentation', guidance: ` Expert in JSDoc, TypeScript, and OpenAPI specification. Must parse function signatures, extract type information, generate markdown docs. Should include examples from test files. Output format: Markdown files with sections for endpoints, parameters, responses, examples. `, }); ``` ## API Reference ### `AgentGenerator` #### `generateAgent(options: AgentOptions): Promise<GeneratedAgent>` Generates an agent following the 10 Golden Rules. **Parameters:** - `options.name` (string, required): Kebab-case agent name - `options.description` (string, required): Agent description (min 10 chars) - `options.template` (AgentTemplate, optional): Template type (default: 'simple') - `options.platform` (Platform, required): Target platform - `options.projectPath` (string, required): Project root path - `options.guidance` (string, optional): Natural language guidance - `options.interactive` (boolean, optional): Enable interactive mode - `options.model` (ModelTier, optional): Override template model tier - `options.tools` (string[], optional): Override template tools - `options.dryRun` (boolean, optional): Preview without writing - `options.category` (string, optional): Agent category - `options.version` (string, optional): Agent version **Returns:** `GeneratedAgent` with name, path, content, platform, model, tools #### `deployAgent(agent: GeneratedAgent): Promise<void>` Deploys a generated agent to its target path. #### `getTemplateConfig(template: AgentTemplate): TemplateConfig` Retrieves configuration for a template. #### `listTemplates(): Array<{ name: AgentTemplate; config: TemplateConfig }>` Lists all available templates with their configurations. ## See Also - [10 Golden Rules](../../docs/agent-design-bible.md) - Agent design principles - [Agent Packager](../../agents/agent-packager.ts) - Platform transformations - [Agent Deployer](../../agents/agent-deployer.ts) - Deployment engine