anyproto

code-generation-developer

@anyproto/code-generation-developer
anyproto
424
66 forks
Updated 1/6/2026
View on GitHub

Code Generation Developer (Smart Router): Context-aware routing to code generation workflows: SwiftGen, Sourcery, Feature Flags, and Protobuf. Helps you navigate when and how to run generators.

Installation

$skills install @anyproto/code-generation-developer
Claude Code
Cursor
Copilot
Codex
Antigravity

Details

Path.claude/skills/code-generation-developer/SKILL.md
Branchdevelop
Scoped Name@anyproto/code-generation-developer

Usage

After installing, this skill will be available to your AI coding assistant.

Verify installation:

skills list

Skill Instructions

Code Generation Developer (Smart Router)

Purpose

Context-aware routing to code generation workflows: SwiftGen, Sourcery, Feature Flags, and Protobuf. Helps you navigate when and how to run generators.

When Auto-Activated

  • Running or discussing make generate
  • Adding feature flags
  • Working with generated files
  • Keywords: swiftgen, sourcery, feature flags, FeatureFlags, make generate

🚨 CRITICAL RULES (NEVER VIOLATE)

  1. NEVER edit generated files - Files marked with // Generated using Sourcery/SwiftGen are auto-generated
  2. ALWAYS run make generate after changes - When updating templates, flags, assets, or localization
  3. Feature flags for all new features - Wrap experimental code for safe rollouts
  4. Update source, not generated code - Edit templates/configurations, then regenerate

📋 Essential Commands

make generate        # Run all generators (SwiftGen, Sourcery, assets, localization)
make generate-middle # Regenerate middleware and protobuf (when dependencies change)
make setup-middle    # Initial middleware setup

🚩 Feature Flags Quick Workflow

1. Define Flag

File: /Modules/AnytypeCore/AnytypeCore/Utils/FeatureFlags/FeatureDescription+Flags.swift

extension FeatureDescription {
    static let newChatInterface = FeatureDescription(
        title: "New Chat Interface",
        type: .feature(author: "Your Name", releaseVersion: "0.42.0"),
        defaultValue: false,  // Off in production
        debugValue: true      // On in debug builds for testing
    )
}

2. Generate

make generate

This creates: Modules/AnytypeCore/AnytypeCore/Generated/FeatureFlags.swift

3. Use in Code

import AnytypeCore

if FeatureFlags.newChatInterface {
    NewChatView()
} else {
    LegacyChatView()
}

Flag Types

  • .debug: Debug-only (not available in production)
  • .feature(author:releaseVersion:): Production feature with metadata

Best Practices

  • defaultValue: false for unreleased features
  • debugValue: true for easier developer testing
  • Remove flags after full rollout

🎯 When to Run make generate

You Did ThisRun ThisWhy
Added/updated .xcstringsmake generateRegenerate Loc constants
Added feature flagmake generateGenerate FeatureFlags enum
Added icon to Assets.xcassetsmake generateGenerate Image asset constants
Modified Sourcery templatemake generateRegenerate code from templates
Updated middleware versionmake generate-middleRegenerate protobuf bindings

🎨 SwiftGen - Assets & Localization

Adding Icons

  1. Export SVG from Figma (e.g., "32/qr code" → QRCode.svg)
  2. Add to /Modules/Assets/.../Assets.xcassets/DesignSystem/x32/QRCode.imageset/
  3. Run make generate
  4. Use: Image(asset: .X32.qrCode)

Icon Sizes: x18, x24, x32, x40 (pt)

Localization

SwiftGen generates Loc constants from .xcstrings files.

See localization-developer skill for complete workflow.

🔧 Sourcery - Template-Based Generation

Sourcery generates Swift code from templates based on source file annotations.

Common uses:

  • Protocol conformance
  • Mock implementations
  • Dependency injection
  • Enum helpers

Workflow:

  1. Add annotation to source file: // sourcery: AutoEquatable
  2. Run make generate
  3. Use generated code (don't edit generated files!)

🔌 Middleware & Protobuf

When to Regenerate

  • Middleware version updated
  • Dependencies/Middleware/Lib.xcframework missing binaries
  • Build errors related to middleware symbols

Commands

make setup-middle    # Initial setup
make generate-middle # Regenerate middleware + protobuf

⚠️ Common Mistakes

Editing Generated Files

// In FeatureFlags.swift (GENERATED)
static let myFlag: Bool = true  // ❌ DON'T DO THIS
// Your changes will be overwritten

✅ Correct: Edit FeatureDescription+Flags.swift, then make generate

Forgetting to Generate

// Added FeatureDescription but didn't generate
if FeatureFlags.myNewFlag {  // ❌ Error: unresolved identifier
    ...
}

✅ Correct: Run make generate first

Missing Middleware Binaries

Symptoms: "Lib.xcframework missing binaries"

Solution: make setup-middle or make generate

📚 Complete Documentation

Full Guide: Modules/AnytypeCore/CODE_GENERATION_GUIDE.md

For comprehensive coverage of:

  • Feature Flags lifecycle (Development → Beta → Rollout → Cleanup)
  • SwiftGen configuration files and workflows
  • Sourcery templates and annotations
  • Protobuf splitting configuration
  • Complete troubleshooting guide
  • Generated file locations

✅ Checklist: Before Committing

  • Ran make generate if you added/updated:
    • Feature flags
    • Icons/assets
    • Localization strings
    • Sourcery annotations
  • Did NOT manually edit files with "// Generated using" header
  • Committed both source AND generated files
  • Verified build succeeds

🔗 Related Skills & Docs

  • localization-developerLOCALIZATION_GUIDE.md - Localization keys generated by SwiftGen
  • ios-dev-guidelinesIOS_DEVELOPMENT_GUIDE.md - Never edit generated files
  • design-system-developer → Icons generated by SwiftGen

Navigation: This is a smart router. For deep technical details, always refer to CODE_GENERATION_GUIDE.md.