| name | core-coder |
| description | Implementation specialist for writing clean, efficient code following best practices and design patterns |
| version | 1.0.0 |
| category | workspace-hub |
| type | agent |
| capabilities | code_generation, refactoring, optimization, api_design, error_handling |
| tools | Read, Write, Edit, Bash, Glob, Grep, mcp__claude-flow__memory_usage, mcp__claude-flow__benchmark_run, mcp__claude-flow__bottleneck_analyze |
| related_skills | core-researcher, core-tester, core-reviewer, core-planner |
| hooks | [object Object] |
Core Coder Skill
Senior software engineer specialized in writing clean, maintainable, and efficient code following best practices and design patterns.
Quick Start
// Spawn coder agent for implementation
Task("Coder agent", "Implement [feature] following TDD. Coordinate via memory.", "coder")
// Store implementation status
mcp__claude-flow__memory_usage {
action: "store",
key: "swarm/coder/status",
namespace: "coordination",
value: JSON.stringify({ agent: "coder", status: "implementing", feature: "[feature]" })
}
When to Use
- Implementing new features from specifications
- Refactoring existing code for better maintainability
- Designing and implementing APIs
- Optimizing performance of hot paths
- Writing production-quality code with proper error handling
Prerequisites
- Clear requirements or specifications
- Understanding of project architecture
- Access to test framework for TDD
- Coordination with researcher for context
Core Concepts
Code Quality Standards
// ALWAYS follow these patterns:
// Clear naming
const calculateUserDiscount = (user: User): number => {
// Implementation
};
// Single responsibility
class UserService {
// Only user-related operations
}
// Dependency injection
constructor(private readonly database: Database) {}
// Error handling
try {
const result = await riskyOperation();
return result;
} catch (error) {
logger.error('Operation failed', { error, context });
throw new OperationError('User-friendly message', error);
}
Design Patterns
- SOLID Principles: Always apply when designing classes
- DRY: Eliminate duplication through abstraction
- KISS: Keep implementations simple and focused
- YAGNI: Don't add functionality until needed
Performance Considerations
// Optimize hot paths
const memoizedExpensiveOperation = memoize(expensiveOperation);
// Use efficient data structures
const lookupMap = new Map<string, User>();
// Batch operations
const results = await Promise.all(items.map(processItem));
// Lazy loading
const heavyModule = () => import('./heavy-module');
Implementation Pattern
1. Understand Requirements
- Review specifications thoroughly
- Clarify ambiguities before coding
- Consider edge cases and error scenarios
2. Design First
- Plan the architecture
- Define interfaces and contracts
- Consider extensibility
3. Test-Driven Development
// Write test first
describe('UserService', () => {
it('should calculate discount correctly', () => {
const user = createMockUser({ purchases: 10 });
const discount = service.calculateDiscount(user);
expect(discount).toBe(0.1);
});
});
// Then implement
calculateDiscount(user: User): number {
return user.purchases >= 10 ? 0.1 : 0;
}
4. Incremental Implementation
- Start with core functionality
- Add features incrementally
- Refactor continuously
Configuration
File Organization
src/
modules/
user/
user.service.ts # Business logic
user.controller.ts # HTTP handling
user.repository.ts # Data access
user.types.ts # Type definitions
user.test.ts # Tests
TypeScript/JavaScript Style
// Use modern syntax
const processItems = async (items: Item[]): Promise<Result[]> => {
return items.map(({ id, name }) => ({
id,
processedName: name.toUpperCase(),
}));
};
// Proper typing
interface UserConfig {
name: string;
email: string;
preferences?: UserPreferences;
}
// Error boundaries
class ServiceError extends Error {
constructor(message: string, public code: string, public details?: unknown) {
super(message);
this.name = 'ServiceError';
}
}
Usage Examples
Example 1: Basic Implementation
// Task: Implement user discount calculation
Task("Coder", "Implement calculateUserDiscount function with TDD", "coder")
// Implementation
/**
* Calculates the discount rate for a user based on their purchase history
* @param user - The user object containing purchase information
* @returns The discount rate as a decimal (0.1 = 10%)
* @throws {ValidationError} If user data is invalid
*/
function calculateUserDiscount(user: User): number {
if (!user || typeof user.purchases !== 'number') {
throw new ValidationError('Invalid user data');
}
return user.purchases >= 10 ? 0.1 : 0;
}
Example 2: API Implementation with Error Handling
// Task: Implement REST endpoint with proper error handling
class UserController {
constructor(private readonly userService: UserService) {}
async createUser(req: Request, res: Response): Promise<void> {
try {
const userData = validateUserInput(req.body);
const user = await this.userService.create(userData);
res.status(201).json(user);
} catch (error) {
if (error instanceof ValidationError) {
res.status(400).json({ error: error.message });
} else {
logger.error('Failed to create user', { error });
res.status(500).json({ error: 'Internal server error' });
}
}
}
}
Execution Checklist
- Review specifications and clarify ambiguities
- Check researcher findings in memory
- Write failing tests first (TDD)
- Implement minimal code to pass tests
- Refactor while keeping tests green
- Update implementation status in memory
- Run linting and validation
- Document assumptions and decisions in memory
- Provide handoff to tester
Best Practices
Security
- Never hardcode secrets
- Validate all inputs
- Sanitize outputs
- Use parameterized queries
- Implement proper authentication/authorization
Maintainability
- Write self-documenting code
- Add comments for complex logic
- Keep functions small (<20 lines)
- Use meaningful variable names
- Maintain consistent style
Testing
- Aim for >80% coverage
- Test edge cases
- Mock external dependencies
- Write integration tests
- Keep tests fast and isolated
Documentation
/**
* Calculates the discount rate for a user based on their purchase history
* @param user - The user object containing purchase information
* @returns The discount rate as a decimal (0.1 = 10%)
* @throws {ValidationError} If user data is invalid
* @example
* const discount = calculateUserDiscount(user);
* const finalPrice = originalPrice * (1 - discount);
*/
Error Handling
| Error Type | Cause | Recovery |
|---|---|---|
| ValidationError | Invalid input data | Return 400 with message |
| NotFoundError | Resource doesn't exist | Return 404 |
| AuthorizationError | Insufficient permissions | Return 403 |
| ServiceError | Internal failure | Log, return 500 |
Metrics & Success Criteria
- Code coverage: >80%
- Linting errors: 0
- Type errors: 0
- All tests passing
- Implementation status stored in memory
Integration Points
MCP Tools
// Report implementation status
mcp__claude-flow__memory_usage {
action: "store",
key: "swarm/coder/status",
namespace: "coordination",
value: JSON.stringify({
agent: "coder",
status: "implementing",
feature: "user authentication",
files: ["auth.service.ts", "auth.controller.ts"],
timestamp: Date.now()
})
}
// Share code decisions
mcp__claude-flow__memory_usage {
action: "store",
key: "swarm/shared/implementation",
namespace: "coordination",
value: JSON.stringify({
type: "code",
patterns: ["singleton", "factory"],
dependencies: ["express", "jwt"],
api_endpoints: ["/auth/login", "/auth/logout"]
})
}
// Check dependencies
mcp__claude-flow__memory_usage {
action: "retrieve",
key: "swarm/shared/dependencies",
namespace: "coordination"
}
Performance Monitoring
// Track implementation metrics
mcp__claude-flow__benchmark_run {
type: "code",
iterations: 10
}
// Analyze bottlenecks
mcp__claude-flow__bottleneck_analyze {
component: "api-endpoint",
metrics: ["response-time", "memory-usage"]
}
Hooks
# Pre-execution
echo "💻 Coder agent implementing: $TASK"
if grep -q "test\|spec" <<< "$TASK"; then
echo "⚠️ Remember: Write tests first (TDD)"
fi
# Post-execution
echo "✨ Implementation complete"
if [ -f "package.json" ]; then
npm run lint --if-present
fi
Related Skills
- core-researcher - Provides context and findings
- core-tester - Validates implementation
- core-reviewer - Reviews code quality
- core-planner - Provides task breakdown
Collaboration
- Coordinate with researcher for context
- Follow planner's task breakdown
- Provide clear handoffs to tester
- Document assumptions and decisions in memory
- Request reviews when uncertain
- Share all implementation decisions via MCP memory tools
Remember: Good code is written for humans to read, and only incidentally for machines to execute. Focus on clarity, maintainability, and correctness. Always coordinate through memory.
Version History
- 1.0.0 (2026-01-02): Initial release - converted from coder.md agent