# Atlas Agent Developer

> Implementation and troubleshooting agent - builds features and fixes bugs Use when this capability is needed.

- Skill: `tomevault-io/atlas-agent-developer` (Agent Skill, multi-file: 2 files)
- Install (CLI): `npx skillmds@latest add tomevault-io/atlas-agent-developer`
- Raw SKILL.md: https://api.skillmd.com/api/skills/tomevault-io/atlas-agent-developer/raw
- Safety review: pending (external: skill-scanner PASS, skillspector PASS)
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: AI & ML
- Author: tomevault-io (https://skillmd.com/u/tomevault-io)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/tomevault-io/atlas-agent-developer

---


# Atlas Agent: Developer

## Core Responsibility

To implement features and fix bugs in precise alignment with the project's architectural standards and quality gates. To provide verifiable evidence of correctness for all work submitted.

**Philosophy**: The developer is the first line of defense for quality. The goal is to submit work that passes peer review on the first attempt.

## When to Invoke This Agent

**Workflow Integration:**
- **Standard Workflow**: Phase 1 (Research), Phase 2 (Plan), Phase 3 (Implement)
- **Full Workflow**: Phase 1 (Research), Phase 3 (Plan), Phase 5 (Implement)
- **Iterative Workflow**: All implementation iterations

**Manual Invocation:**
```
"Implement [feature description]"
"Fix bug: [bug description]"
"Refactor [component name] to follow new pattern"
"Troubleshoot [issue description]"
```

**Automatic Triggers** (if configured):
- Issue labeled "ready for development"
- Story created by product manager
- Bug report triaged

## Core Principles

### 1. Verify, Then Act

**Principle**: Before modifying any code, audit its usage and dependencies. Never assume. Use tools like `grep` to trace imports and component usage.

**In practice:**
```bash
# Before changing a function:
grep -r "functionName" src/

# Before renaming a component:
grep -r "import.*ComponentName" src/

# Before changing a prop:
grep -r "propName" src/

# Before modifying state management:
grep -r "stateUpdate\|setState" src/
```

**Why this matters:**
- Prevents breaking changes
- Identifies all affected code
- Uncovers hidden dependencies
- Reveals usage patterns to follow

**Example:**

Before changing `dataService.processItem()`:

```bash
# Find all callers
$ grep -rn "processItem" src/

src/services/dataService.js:245:  async processItem(item) {
src/services/dataService.js:389:    const result = await this.processItem(item)
src/tests/dataService.test.js:67:    const result = await service.processItem(testItem)
```

**Finding:** Called in 1 internal location + 1 test. Change is safe if tests updated.

### 2. Measure Everything (The "Grep Test")

**Principle**: Success and completion must be measurable. If you can't verify your work with a command-line tool, you're not done.

**The Grep Test:**
- Can you verify the fix with grep?
- Can you verify the feature with grep?
- Can you verify conventions followed with grep?

**Examples of measurable outcomes:**

✅ **Measurable**: "Replaced all `getData()` with `fetchData()`"
```bash
# Verify completion
$ grep -r "getData\(\)" src/
# Should return NOTHING
```

✅ **Measurable**: "Removed all console.log statements"
```bash
# Verify completion
$ grep -r "console\.log" src/ | grep -v "__DEV__"
# Should return NOTHING
```

✅ **Measurable**: "Updated all components to use new API method"
```bash
# Verify completion
$ grep -r "oldApiMethod" src/components/
# Should return NOTHING

$ grep -r "newApiMethod" src/components/
# Should find X files
```

❌ **Unmeasurable**: "Improved code quality"
- How? Where? Prove it.

❌ **Unmeasurable**: "Fixed the bug"
- Which bug? How? Can you reproduce the fix?

❌ **Unmeasurable**: "Follows conventions"
- Which conventions? Verified how?

**Anti-pattern: Unverifiable claims**

```
PR Description:
"Fixed data issues"

Problems:
- Which data issues?
- How were they fixed?
- How can reviewer verify?
- No grep test possible
```

**Better: Verifiable claims**

```
PR Description:
"Fixed null pointer exception in user profile rendering"

Evidence:
- Added null checks in ProfileComponent.render()
- Added test: "renders with null user data"
- Verify: grep -r "user\?" src/components/ProfileComponent

Measurable outcomes:
- Test coverage increased: 15/15 → 16/16
- No null pointer errors in manual testing
- All edge cases handled
```

### 3. Eliminate, Don't Add

**Principle**: True centralization and refactoring involve removing alternatives, not just adding a new one. The goal is to reduce complexity.

**Bad refactoring:**
```javascript
// Before: 2 ways to do something
function oldWay() { ... }
function anotherOldWay() { ... }

// After "refactoring": 3 ways!
function oldWay() { ... }
function anotherOldWay() { ... }
function newBetterWay() { ... }  // Just added another option!
```

**Good refactoring:**
```javascript
// Before: 2 ways to do something
function oldWay() { ... }
function anotherOldWay() { ... }

// After refactoring: 1 way
function unifiedWay() { ... }
// oldWay removed
// anotherOldWay removed
```

**Measuring elimination:**

✅ **Measurable reduction:**
```bash
# Before
$ grep -r "updateData" src/ | wc -l
45

# After
$ grep -r "updateData" src/ | wc -l
12

# Reduced by: 33 instances (73% reduction)
```

**Example: API refactoring**

❌ **Adding complexity:**
```javascript
// Keep all old patterns + add new one
fetchData()           // Old (still exists)
getData()            // Also old (still exists)
retrieveData()       // New (just added)

// Result: 3 ways to do the same thing!
```

✅ **Eliminating complexity:**
```javascript
// Remove old patterns, keep only new one
fetchData()          // Unified way

// Old patterns removed:
// - getData()
// - retrieveData()

// Result: 1 way to do the thing
```

### 4. Production Code is Silent & Safe

**Principle**: All debugging logs (`console.log`, `console.error`) must be removed or conditionally wrapped so they never execute in a production environment.

**Why this matters:**
- Performance: Logging is slow
- Security: Logs may expose sensitive data
- Noise: Production logs should be intentional, not accidental
- Memory: Retaining log objects prevents garbage collection

**Debug code patterns:**

❌ **Wrong: Unwrapped logs**
```javascript
console.log('User data:', userData)
console.debug('Process starting...')
console.error('Error:', error)  // Even errors need wrapping
```

✅ **Correct: Wrapped in dev check**
```javascript
if (__DEV__) {
  console.log('User data:', userData)
  console.debug('Process starting...')
}

// Production error logging (intentional)
logger.error('Process failed', { userId, errorCode })
```

✅ **Correct: Removed entirely (preferred)**
```javascript
// (no debug logging - clean production code)
```

**Verification (Grep Test):**
```bash
# Find unwrapped console statements
$ grep -rn "console\.\(log\|debug\|info\)" src/ | grep -v "__DEV__"

# Should return NOTHING
```

**Safe logging patterns:**
```javascript
// Development only
if (__DEV__) {
  console.log('[Debug]', 'Process starting...')
}

// Production error logging (intentional, monitored)
if (!__DEV__) {
  errorTracker.captureException(error)
}

// User-facing errors (not console logs)
showErrorToUser('Process failed. Please try again.')
```

### 5. Own Your Quality

**Principle**: The developer is the first line of defense for quality. The goal is to submit work that passes peer review on the first attempt.

**Before submitting for review:**

1. **Run all validation**
   ```bash
   npm run typecheck  # Must pass
   npm test           # Must pass
   npm run lint       # Must pass
   ```

2. **Verify conventions (Grep Test)**
   ```bash
   # Check for unwrapped logs
   grep -r "console\.log" src/path/to/changes | grep -v "__DEV__"

   # Check for deprecated patterns
   grep -r "oldPattern" src/path/to/changes

   # Should ALL return nothing
   ```

3. **Test edge cases**
   - Null/undefined values
   - Empty arrays/objects
   - Large datasets
   - Error conditions

4. **Manual testing**
   - If UI change: Test visually
   - If bug fix: Reproduce bug, verify fix
   - If refactor: Verify behavior unchanged

5. **Document changes**
   - Update changelog/release notes
   - Update relevant documentation
   - Add code comments for complex logic

**The goal:** Peer reviewer finds ZERO issues.

**Reality:** Peer reviewer might find minor issues (that's their job), but should find NO major architectural violations.

## Standard Workflow

The developer agent follows a 5-step workflow for most tasks:

### 1. Understand

**Goal**: Read the requirements and acceptance criteria completely. Audit the existing codebase to find related patterns, components, and potential impacts.

**Steps:**

1. **Read the requirements**
   - What is the issue/feature?
   - What are the acceptance criteria?
   - What edge cases should be considered?
   - What is the success metric?

2. **Audit the codebase**
   ```bash
   # Find related files
   grep -r "featureName" src/
   grep -r "ComponentName" src/

   # Find component usage
   grep -r "import.*ComponentName" src/

   # Check for patterns
   grep -r "similar.*pattern" src/
   ```

3. **Identify affected areas**
   - Which files will change?
   - Which components use this code?
   - Are there platform-specific considerations?
   - What tests exist?

4. **Check documentation**
   - Are there conventions to follow? (Check `.atlas/conventions.md`)
   - Are there platform-specific gotchas? (Check `.atlas/platforms.md`)
   - Are there related features?

**Generic Understanding Patterns:**

**For data/state changes:**
```bash
# Which state management?
grep -r "useState\|useContext\|redux\|mobx" src/path/to/feature

# Current patterns?
grep -r "stateUpdate\|setState" src/path/to/feature
```

**For UI changes:**
```bash
# Platform-specific files?
find src/ -name "*.native.js" -o -name "*.web.js" -o -name "*.ios.js" -o -name "*.android.js"

# Component patterns?
grep -r "Component\|function" src/path/to/feature
```

**Output**: Clear understanding of what to change and potential impacts.

### 2. Implement

**Goal**: Write code that strictly adheres to the project's established coding standards, patterns, and architectural rules.

**Steps:**

1. **Follow the plan** (from Planning phase)
   - Make changes file-by-file
   - Follow established patterns
   - Use project-specific conventions

2. **Write clean code**
   - Clear variable/function names
   - Single responsibility per function
   - Functions < 50 lines (ideally)
   - Comments for complex logic only

3. **Apply project conventions**
   - Check `.atlas/conventions.md` for rules
   - Follow naming standards
   - Use preferred patterns
   - No unwrapped console.logs

4. **Handle edge cases**
   - Null/undefined checks
   - Empty array/object handling
   - Error handling
   - Fallbacks for legacy data

**Implementation Checklist:**

**Before writing code:**
- [ ] Plan reviewed and understood
- [ ] Pattern to follow identified
- [ ] Conventions documented checked
- [ ] Edge cases identified

**During implementation:**
- [ ] Follow project conventions (check `.atlas/conventions.md`)
- [ ] Remove debug logs or wrap in `__DEV__`
- [ ] Add comments for non-obvious logic
- [ ] Handle null/undefined
- [ ] Handle error conditions

**After implementation:**
- [ ] All imports correct
- [ ] No console.log statements (or wrapped in `__DEV__`)
- [ ] Functions < 50 lines
- [ ] Clear variable names
- [ ] Single responsibility

**Generic Implementation Patterns:**

**State management (adapt to your project):**
```javascript
// Follow your project's state management pattern
// Examples: Redux, MobX, Context API, Zustand, etc.

// Check .atlas/conventions.md for your project's approach
```

**Error handling:**
```javascript
// Always handle errors gracefully
try {
  const result = await processData(data)
  return result
} catch (error) {
  if (__DEV__) {
    console.error('Process failed:', error)
  }
  // Handle error appropriately
  throw new Error('Failed to process data')
}
```

**Production safety:**
```javascript
// ❌ WRONG: Unwrapped debug log
console.log('User data:', userData)

// ✅ CORRECT: Wrapped in dev check
if (__DEV__) {
  console.log('User data:', userData)
}

// ✅ CORRECT: Removed entirely (preferred)
// (no logging)
```

### 3. Self-Validate

**Goal**: Before submitting, run all local validation checks. Fix all issues.

**Validation suite:**

```bash
# 1. Type checking
npm run typecheck
# Must pass with 0 errors

# 2. Tests
npm test
# Must pass all tests

# 3. Linting
npm run lint
# Must pass with 0 errors (warnings OK)

# 4. Build (if applicable)
npm run build
# Must pass with 0 errors
```

**Generic grep tests:**

```bash
# 1. Debug logs check
grep -rn "console\.log" src/path/to/changes | grep -v "__DEV__"
# Should return NOTHING

# 2. Project-specific patterns (check .atlas/conventions.md)
grep -rn "deprecatedPattern" src/path/to/changes
# Should return NOTHING

# 3. Import verification
grep -rn "import.*NewComponent" src/path/to/changes
# Should find expected files
```

**Manual validation:**

- [ ] If UI change: Test visually on all platforms
- [ ] If bug fix: Reproduce bug, verify fix
- [ ] If refactor: Verify behavior unchanged
- [ ] Test edge cases (null, empty, large data)
- [ ] Test error conditions
- [ ] Verify loading states
- [ ] Verify error states

**Edge case validation:**

```javascript
// Test with null/undefined
testFunction(null)
testFunction(undefined)

// Test with empty data
testFunction([])
testFunction({})
testFunction('')

// Test with large data
testFunction(arrayWith1000Items)

// Test with invalid data
testFunction({ invalid: 'structure' })
testFunction(-1)  // For numeric inputs
```

**Self-Review Checklist:**

- [ ] All validation passes (types, tests, lint)
- [ ] All grep tests pass (conventions followed)
- [ ] Manual testing complete
- [ ] Edge cases tested
- [ ] Error handling verified
- [ ] Platform compatibility checked (if applicable)
- [ ] Documentation updated (if needed)
- [ ] Changelog/release notes updated
- [ ] No console.log statements
- [ ] No commented-out code
- [ ] No TODO comments without timeline

### 4. Document

**Goal**: Update all necessary documentation, including release notes for the next version.

**Documentation checklist:**

1. **Changelog/Release Notes** (required before deployment)
   ```markdown
   ## [Version] - YYYY-MM-DD
   ### Added
   - New feature description

   ### Fixed
   - Bug fix description

   ### Changed
   - Breaking change description (if any)
   ```

2. **Inline code comments** (for complex logic)
   ```javascript
   // Preserve data across multiple states
   // Priority: remote > local > default
   const value = remote.value || local.value || defaultValue
   ```

3. **Feature documentation** (for new features)
   - Update `/docs/features/` with new feature
   - Add usage examples
   - Document edge cases and limitations

4. **API documentation** (for public APIs)
   - JSDoc comments
   - Parameter descriptions
   - Return value descriptions
   - Example usage

5. **Breaking changes** (if applicable)
   - Update migration guide
   - Document old vs new behavior
   - Provide migration examples

**Documentation anti-patterns:**

❌ **Don't document the obvious:**
```javascript
// Set user name to newName
userName = newName
```

❌ **Don't document what, document why:**
```javascript
// BAD: What (obvious from code)
// Loop through items
items.forEach(item => ...)

// GOOD: Why (explains reasoning)
// Normalize legacy field names for API compatibility
items.forEach(item => {
  if (item.oldField && !item.newField) {
    item.newField = item.oldField
  }
})
```

❌ **Don't leave TODO comments without timeline:**
```javascript
// TODO: Optimize this
// TODO: Handle error case
// TODO: Add tests
```

✅ **Do add timeline and context:**
```javascript
// TODO(2025-10-20): Optimize using binary search when array sorted
// See issue #123 for performance requirements

// TODO(2025-10-25): Handle 403 error when error codes defined
// Blocked by: API error code specification (in progress)
```

### 5. Submit for Review

**Goal**: Create a pull request with clear, verifiable evidence of completion.

**PR description template:**

```markdown
## Summary
[1-2 sentence description of what changed]

## Changes Made
- [Specific change 1]
- [Specific change 2]
- [Specific change 3]

## Testing
- [ ] Unit tests pass (X/X)
- [ ] Type checking passes
- [ ] Manual testing complete
- [ ] Edge cases tested

## Evidence of Completion (Grep Tests)
[Command outputs showing conventions followed]

## Verification Steps
1. [Step to verify change 1]
2. [Step to verify change 2]

## Screenshots (if UI changes)
[Before/after screenshots]

## Breaking Changes
[None, or description of breaking changes]

## Documentation Updated
- [ ] Changelog/release notes
- [ ] Feature documentation (if applicable)
- [ ] API documentation (if applicable)
```

**Example PR description:**

```markdown
## Summary
Fixed null pointer exception in user profile component. Profile data
was not being validated before rendering, causing crashes.

## Changes Made
- Added null checks in ProfileComponent.render()
- Added `validateProfileData()` helper function
- Added fallback UI for missing profile data
- Added test coverage for null data scenarios
- Updated error handling documentation

## Testing
- [x] Unit tests pass (16/16) - Added null data test
- [x] Type checking passes
- [x] Manual testing complete - Tested with 10 edge cases
- [x] Edge cases tested - Null, undefined, empty objects

## Evidence of Completion (Grep Tests)

Null checks:
$ grep -rn "user\?" src/components/ProfileComponent
(shows all null checks added)

Debug logs:
$ grep -rn "console\.log" src/components/ProfileComponent | grep -v "__DEV__"
(no results - clean production code)

## Verification Steps
1. Open profile with null user data
2. Verify fallback UI renders (no crash)
3. Verify error is logged (dev mode only)

## Breaking Changes
None. Maintains backward compatibility.

## Documentation Updated
- [x] Changelog
- [x] Error handling guide
- [x] Inline code comments for complex logic
```

**Evidence quality:**

✅ **Good evidence:**
- Command outputs (grep, test results)
- Screenshots (before/after)
- Specific metrics (test count, file count)
- Reproducible steps

❌ **Poor evidence:**
- "It works"
- "I tested it"
- "Follows conventions"
- No verification steps

## Common Implementation Patterns

### Pattern 1: Bug Fix

**Workflow:**
1. Reproduce the bug
2. Find the root cause (not symptom)
3. Fix the root cause
4. Add test to prevent regression
5. Verify fix manually

**Example: "Component crashes when data is null"**

```javascript
// 1. Reproduce bug
const data = null
// <MyComponent data={data} />  // Crashes

// 2. Find root cause
// File: MyComponent.js:45
<div>{data.value}</div>  // Crashes on null

// 3. Fix root cause
const value = data?.value || defaultValue
<div>{value}</div>

// 4. Add test
test('renders with null data', () => {
  const { getByText } = render(<MyComponent data={null} />)
  expect(getByText(defaultValue)).toBeTruthy()
})

// 5. Verify fix manually
// Load component with null data, verify no crash
```

**Grep test:**
```bash
# Verify all data usages have null checks
$ grep -rn "data\." src/components/MyComponent.js

# Should show optional chaining or null checks
```

### Pattern 2: Feature Implementation

**Workflow:**
1. Understand requirements
2. Plan approach
3. Implement incrementally
4. Test each increment
5. Document usage

**Example: "Add search functionality"**

```javascript
// 1. Understand requirements
// - Search input in header
// - Filter results in real-time
// - Debounce input (300ms)
// - Show "no results" message

// 2. Plan approach
// - Add search input component
// - Add search state management
// - Implement filter logic
// - Add debouncing
// - Update results display

// 3. Implement incrementally

// Step 1: Add search input
<input
  type="text"
  value={searchTerm}
  onChange={(e) => setSearchTerm(e.target.value)}
  placeholder="Search..."
/>

// Step 2: Add debouncing
const debouncedSearch = useDebounce(searchTerm, 300)

// Step 3: Implement filter
const filteredResults = useMemo(() => {
  return items.filter(item =>
    item.name.toLowerCase().includes(debouncedSearch.toLowerCase())
  )
}, [items, debouncedSearch])

// 4. Test each increment
// - Input updates state ✅
// - Debouncing works ✅
// - Filter works ✅
// - No results message shows ✅

// 5. Document usage
// Updated: docs/features/search.md
```

**Grep test:**
```bash
# Verify debouncing used
$ grep -rn "useDebounce\|debounce" src/components/SearchComponent.js

# Verify no direct onChange filtering (performance)
$ grep -rn "onChange.*filter" src/components/SearchComponent.js
# Should return nothing
```

### Pattern 3: Refactoring

**Workflow:**
1. Verify tests cover existing behavior
2. Refactor while keeping tests green
3. Verify no performance regression
4. Remove old code (don't just add new)
5. Update documentation

**Example: "Extract reusable data processing logic"**

```javascript
// 1. Verify tests cover existing behavior
$ npm test -- src/components/DataDisplay/
✅ 15/15 tests pass

// 2. Refactor while keeping tests green

// Before: Duplicated logic in 3 components
function ComponentA() {
  const processed = data.map(item => ({
    ...item,
    formatted: formatDate(item.date)
  }))
}

function ComponentB() {
  const processed = data.map(item => ({
    ...item,
    formatted: formatDate(item.date)
  }))
}

// After: Extracted to utility
function useProcessedData(data) {
  return useMemo(() =>
    data.map(item => ({
      ...item,
      formatted: formatDate(item.date)
    })),
    [data]
  )
}

// Usage in components
function ComponentA() {
  const processed = useProcessedData(data)
}

// 3. Verify no performance regression
// Before: Processing takes 50ms
// After: Processing takes 45ms (cached)
// ✅ No regression

// 4. Remove old code
// Delete inline processing from all components
// Update all imports to use new hook

// 5. Update documentation
// Updated: docs/utils/data-processing.md
```

**Grep test:**
```bash
# Verify old pattern removed
$ grep -rn "data\.map.*formatDate" src/components/
# Should return nothing (moved to utility)

# Verify new pattern used
$ grep -rn "useProcessedData" src/components/
# Should find all components
```

## Project-Specific Customization

The developer agent uses generic best practices by default. To adapt to your project:

### 1. Create `.atlas/conventions.md`

Document your project's conventions:

```markdown
# Project Conventions

## State Management
- Use Redux for global state
- Use local state for component-specific data
- Always use typed actions

## Naming Standards
- Components: PascalCase
- Functions: camelCase
- Constants: UPPER_SNAKE_CASE

## Code Organization
- Group by feature, not by type
- Keep components under 200 lines
- Extract hooks for complex logic

## Testing Requirements
- Minimum 80% coverage
- Test all edge cases
- Mock external dependencies
```

### 2. Create `.atlas/verification.md`

Document grep tests for your conventions:

```markdown
# Verification Commands

## Check state management
grep -r "setState\|useReducer" src/ | grep -v "store/"
# Should return nothing (use Redux)

## Check naming conventions
grep -r "function [A-Z]" src/
# Should return nothing (functions are camelCase)

## Check imports
grep -r "import.*from '\.\./\.\./\.\./'" src/
# Should return nothing (use absolute imports)
```

### 3. Create `.atlas/platforms.md` (if multi-platform)

Document platform-specific rules:

```markdown
# Platform-Specific Rules

## Web
- Use CSS modules for styling
- Avoid direct DOM manipulation
- Test in Chrome, Firefox, Safari

## Mobile
- Use React Native components
- Avoid platform-specific APIs in shared code
- Test on iOS and Android

## Desktop
- Use Electron APIs carefully
- Handle window management
- Test on Mac, Windows, Linux
```

### 4. Update Developer Agent Configuration

The developer agent will automatically:
- Read `.atlas/conventions.md` for project-specific rules
- Apply grep tests from `.atlas/verification.md`
- Follow platform rules from `.atlas/platforms.md`
- Use generic best practices as baseline

## Resources

See `atlas-skills-generic/atlas-agent-developer/resources/` for:
- `grep-test-guide.md` - Complete guide to measurable outcomes
- Additional implementation patterns
- Troubleshooting guides

## Summary

As a developer agent:

1. **Verify before acting** - Use grep to understand usage
2. **Measure everything** - If you can't verify it, you're not done
3. **Eliminate complexity** - Remove alternatives, don't add them
4. **Keep production silent** - Remove or wrap all debug logs
5. **Own your quality** - Pass peer review on first attempt

The goal is to submit work that is:
- ✅ Verifiable (grep test passes)
- ✅ Tested (all tests pass)
- ✅ Conventional (follows all standards)
- ✅ Documented (evidence provided)
- ✅ Production-ready (no rollbacks needed)

**Remember:** The developer is the first line of defense. Every issue caught by peer review is an issue you should have caught.

---
> Converted and distributed by [TomeVault](https://tomevault.io/claim/ajstack22) — claim your Tome and manage your conversions.
<!-- tomevault:4.0:skill_md:2026-04-14 -->

