- Add validation framework (config, model, results, study validators) - Add Claude Code skills (create-study, run-optimization, generate-report, troubleshoot, analyze-model) - Add Atomizer Dashboard (React frontend + FastAPI backend) - Reorganize docs into structured directories (00-09) - Add neural surrogate modules and training infrastructure - Add multi-objective optimization support 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
28 KiB
Atomizer Development Roadmap
Vision: Transform Atomizer into an LLM-native engineering assistant for optimization
Last Updated: 2025-01-16
Vision Statement
Atomizer will become an LLM-driven optimization framework where AI acts as a scientist/programmer/coworker that can:
- Understand natural language optimization requests
- Configure studies autonomously
- Write custom Python functions on-the-fly during optimization
- Navigate and extend its own codebase
- Make engineering decisions based on data analysis
- Generate comprehensive optimization reports
- Continuously expand its own capabilities through learning
Architecture Philosophy
LLM-First Design Principles
- Discoverability: Every feature must be discoverable and usable by LLM via feature registry
- Extensibility: Easy to add new capabilities without modifying core engine
- Safety: Validate all generated code, sandbox execution, rollback on errors
- Transparency: Log all LLM decisions and generated code for auditability
- Human-in-the-loop: Confirm critical decisions (e.g., deleting studies, pushing results)
- Documentation as Code: Auto-generate docs from code with semantic metadata
Development Phases
Phase 1: Foundation - Plugin & Extension System ✅
Timeline: 2 weeks Status: ✅ COMPLETED (2025-01-16) Goal: Make Atomizer extensible and LLM-navigable
Deliverables
-
Plugin Architecture ✅
- Hook system for optimization lifecycle
pre_solve: Execute before solver launchpost_solve: Execute after solve, before extractionpost_extraction: Execute after result extraction
- Python script execution at optimization stages
- Plugin auto-discovery and registration
- Hook manager with priority-based execution
- Hook system for optimization lifecycle
-
Logging Infrastructure ✅
- Detailed per-trial logs (
trial_logs/)- Complete iteration trace
- Design variables, config, timeline
- Extracted results and constraint evaluations
- High-level optimization log (
optimization.log)- Configuration summary
- Trial progress (START/COMPLETE entries)
- Compact one-line-per-trial format
- Context passing system for hooks
output_dirpassed from runner to all hooks- Trial number, design variables, results
- Detailed per-trial logs (
-
Project Organization ✅
- Studies folder structure with templates
- Comprehensive studies documentation (studies/README.md)
- Model file organization (
model/folder) - Intelligent path resolution (
atomizer_paths.py) - Test suite for hook system
Files Created:
optimization_engine/
├── plugins/
│ ├── __init__.py
│ ├── hook_manager.py # Hook registration and execution ✅
│ ├── pre_solve/
│ │ ├── detailed_logger.py # Per-trial detailed logs ✅
│ │ └── optimization_logger.py # High-level optimization.log ✅
│ ├── post_solve/
│ │ └── log_solve_complete.py # Append solve completion ✅
│ └── post_extraction/
│ ├── log_results.py # Append extracted results ✅
│ └── optimization_logger_results.py # Append to optimization.log ✅
studies/
├── README.md # Comprehensive guide ✅
└── bracket_stress_minimization/
├── README.md # Study documentation ✅
├── model/ # FEA files folder ✅
│ ├── Bracket.prt
│ ├── Bracket_sim1.sim
│ └── Bracket_fem1.fem
└── optimization_results/ # Auto-generated ✅
├── optimization.log
└── trial_logs/
tests/
├── test_hooks_with_bracket.py # Hook validation test ✅
├── run_5trial_test.py # Quick integration test ✅
└── test_journal_optimization.py # Full optimization test ✅
atomizer_paths.py # Intelligent path resolution ✅
Phase 2: Research & Learning System
Timeline: 2 weeks Status: 🟡 NEXT PRIORITY Goal: Enable autonomous research and feature generation when encountering unknown domains
Philosophy
When the LLM encounters a request it cannot fulfill with existing features (e.g., "Create NX materials XML"), it should:
- Detect the knowledge gap by searching the feature registry
- Plan research strategy prioritizing: user examples → NX MCP → web documentation
- Execute interactive research asking the user first for examples
- Learn patterns and schemas from gathered information
- Generate new features following learned patterns
- Test and validate with user confirmation
- Document and integrate into knowledge base and feature registry
This creates a self-extending system that grows more capable with each research session.
Key Deliverables
Week 1: Interactive Research Foundation
-
Knowledge Base Structure
- Create
knowledge_base/folder hierarchy nx_research/- NX-specific learned patternsresearch_sessions/[date]_[topic]/- Session logs with rationaletemplates/- Reusable code patterns learned from research
- Create
-
ResearchAgent Class (
optimization_engine/research_agent.py)identify_knowledge_gap(user_request)- Search registry, identify missing featurescreate_research_plan(knowledge_gap)- Prioritize sources (user > MCP > web)execute_interactive_research(plan)- Ask user for examples firstsynthesize_knowledge(findings)- Extract patterns, schemas, best practicesdesign_feature(synthesized_knowledge)- Create feature spec from learned patternsvalidate_with_user(feature_spec)- Confirm implementation meets needs
-
Interactive Research Workflow
- Prompt templates for asking users for examples
- Example parser (extract structure from XML, Python, journal scripts)
- Pattern recognition (identify reusable templates)
- Confidence tracking (how reliable is this knowledge?)
Week 2: Web Integration & Feature Generation
-
Web Research Integration
- WebSearch integration for NXOpen documentation
- NXOpenTSE scraping for code examples
- Siemens official docs search and parsing
- Multi-source synthesis (combine user examples + web docs)
-
Feature Generation Pipeline
- Code generator using learned templates
- Feature registry auto-update
- Documentation auto-generation (following FEATURE_REGISTRY_ARCHITECTURE.md format)
- Unit test scaffolding from examples
-
Knowledge Base Management
- Research session logging (questions, sources, findings, decisions)
- Confidence score tracking (user-validated > MCP > web docs)
- Knowledge retrieval (search past research before starting new)
- Template library growth (extract reusable patterns from generated code)
Success Criteria
- Materials XML Example: LLM asks for example XML → learns schema → generates new material XMLs
- Knowledge Persistence: Research session saved with rationale, retrievable for future requests
- Multi-Source Synthesis: Combines user example + NXOpenTSE + official docs into one coherent feature
- Template Reuse: Second request for similar feature uses learned template (faster generation)
- User Validation Loop: Generated feature tested, user confirms it works, feedback integrated
Example Workflow
User: "Please create a new material XML for NX with titanium Ti-6Al-4V properties"
LLM (detects gap):
"I don't have a feature for generating NX material XMLs yet. Let me research this.
Do you have an example .xml material file I can learn from?"
User: [uploads steel_material.xml]
LLM (analyzes example):
"Thanks! I've learned the NX material XML schema:
- Root element: <PhysicalMaterial>
- Required fields: Name, Density, YoungModulus, PoissonRatio, ThermalExpansion
- Units specified via attributes
Let me create titanium Ti-6Al-4V with these properties:
- Density: 4430 kg/m³
- Young's Modulus: 113.8 GPa
- Poisson's Ratio: 0.342
- Thermal Expansion: 8.6e-6 /K
[Generates XML]
Does this look correct?"
User: "Yes, perfect!"
LLM (documents):
"Great! I've saved:
1. NX material XML schema to knowledge_base/nx_research/material_xml_schema.md
2. Template generator to optimization_engine/custom_functions/nx_material_generator.py
3. Research session log to knowledge_base/research_sessions/2025-01-16_nx_materials/
Next time you request a material, I can generate it instantly using this template!"
Files to Create
knowledge_base/
├── nx_research/
│ ├── material_xml_schema.md # Learned from user example
│ ├── journal_script_patterns.md # Common NXOpen patterns
│ └── best_practices.md # Engineering guidelines
├── research_sessions/
│ └── 2025-01-16_nx_materials/
│ ├── user_question.txt # Original request
│ ├── sources_consulted.txt # User example, NXOpenTSE, etc.
│ ├── findings.md # What was learned
│ └── decision_rationale.md # Why this implementation
└── templates/
├── xml_generation_template.py # Learned from research
└── journal_script_template.py
optimization_engine/
├── research_agent.py # Main ResearchAgent class
└── custom_functions/
└── nx_material_generator.py # Generated from learned template
Phase 3: LLM Integration Layer
Timeline: 2 weeks Status: 🔵 Not Started Goal: Enable natural language control of Atomizer
Key Deliverables
- Feature Registry - Centralized catalog of all Atomizer capabilities
- Claude Skill - LLM can navigate codebase and understand architecture
- Natural Language Parser - Intent recognition and entity extraction
- Conversational Workflow - Multi-turn conversations with context preservation
Success Vision
User: "Create a stress minimization study for my bracket"
LLM: "I'll set up a new study. Please drop your .sim file in the study folder."
User: "Done. Vary wall_thickness from 3-8mm"
LLM: "Perfect! I've configured:
- Objective: Minimize max von Mises stress
- Design variable: wall_thickness (3.0-8.0mm)
- Sampler: TPE with 50 trials
Ready to start?"
User: "Yes!"
LLM: "Optimization running! View progress at http://localhost:8080"
Phase 4: Dynamic Code Generation
Timeline: 3 weeks Status: 🔵 Not Started Goal: LLM writes and integrates custom code during optimization
Deliverables
-
Custom Function Generator
- Template system for common patterns:
- RSS (Root Sum Square) of multiple metrics
- Weighted objectives
- Custom constraints (e.g., stress/yield_strength < 1)
- Conditional objectives (if-then logic)
- Code validation pipeline (syntax check, safety scan)
- Unit test auto-generation
- Auto-registration in feature registry
- Persistent storage in
optimization_engine/custom_functions/
- Template system for common patterns:
-
Journal Script Generator
- Generate NX journal scripts from natural language
- Library of common operations:
- Modify geometry (fillets, chamfers, thickness)
- Apply loads and boundary conditions
- Extract custom data (centroid, inertia, custom expressions)
- Validation against NXOpen API
- Dry-run mode for testing
-
Safe Execution Environment
- Sandboxed Python execution (RestrictedPython or similar)
- Whitelist of allowed imports
- Error handling with detailed logs
- Rollback mechanism on failure
- Logging of all generated code to audit trail
Files to Create:
optimization_engine/
├── custom_functions/
│ ├── __init__.py
│ ├── templates/
│ │ ├── rss_template.py
│ │ ├── weighted_sum_template.py
│ │ └── constraint_template.py
│ ├── generator.py # Code generation engine
│ ├── validator.py # Safety validation
│ └── sandbox.py # Sandboxed execution
├── code_generation/
│ ├── __init__.py
│ ├── journal_generator.py # NX journal script generation
│ └── function_templates.py # Jinja2 templates
Phase 5: Intelligent Analysis & Decision Support
Timeline: 3 weeks Status: 🔵 Not Started Goal: LLM analyzes results and guides engineering decisions
Deliverables
-
Result Analyzer
- Statistical analysis module
- Convergence detection (plateau in objective)
- Pareto front identification (multi-objective)
- Sensitivity analysis (which params matter most)
- Outlier detection
- Trend analysis (monotonic relationships, inflection points)
- Recommendations engine (refine mesh, adjust bounds, add constraints)
- Statistical analysis module
-
Surrogate Model Manager
- Quality metrics calculation
- R² (coefficient of determination)
- CV score (cross-validation)
- Prediction error distribution
- Confidence intervals
- Surrogate fitness assessment
- "Ready to use" threshold (e.g., R² > 0.9)
- Warning if predictions unreliable
- Active learning suggestions (which points to sample next)
- Quality metrics calculation
-
Decision Assistant
- Trade-off interpreter (explain Pareto fronts)
- "What-if" analysis (predict outcome of parameter change)
- Constraint violation diagnosis
- Next-step recommendations
Example:
User: "Summarize optimization results"
→ LLM:
Analyzes 50 trials, identifies best design at trial #34:
- wall_thickness = 3.2mm (converged from initial 5mm)
- max_stress = 187 MPa (target: 200 MPa ✓)
- mass = 0.45 kg (15% lighter than baseline)
Issues detected:
- Stress constraint violated in 20% of trials (trials 5,12,18...)
- Displacement shows high sensitivity to thickness (Sobol index: 0.78)
Recommendations:
1. Relax stress limit to 210 MPa OR
2. Add fillet radius as design variable (currently fixed at 2mm)
3. Consider thickness > 3mm for robustness
Files to Create:
optimization_engine/
├── analysis/
│ ├── __init__.py
│ ├── statistical_analyzer.py # Convergence, sensitivity
│ ├── surrogate_quality.py # R², CV, confidence intervals
│ ├── decision_engine.py # Recommendations
│ └── visualizers.py # Plot generators
Phase 6: Automated Reporting
Timeline: 2 weeks Status: 🔵 Not Started Goal: Generate comprehensive HTML/PDF optimization reports
Deliverables
-
Report Generator
- Template system (Jinja2)
- Executive summary (1-page overview)
- Detailed analysis (convergence plots, sensitivity charts)
- Appendices (all trial data, config files)
- Auto-generated plots (Chart.js for web, Matplotlib for PDF)
- Embedded data tables (sortable, filterable)
- LLM-written narrative explanations
- Template system (Jinja2)
-
Multi-Format Export
- HTML (interactive, shareable via link)
- PDF (static, for archival/print)
- Markdown (for version control, GitHub)
- JSON (machine-readable, for post-processing)
-
Smart Narrative Generation
- LLM analyzes data and writes insights in natural language
- Explains why certain designs performed better
- Highlights unexpected findings (e.g., "Counter-intuitively, reducing thickness improved stress")
- Includes engineering recommendations
Files to Create:
optimization_engine/
├── reporting/
│ ├── __init__.py
│ ├── templates/
│ │ ├── executive_summary.html.j2
│ │ ├── detailed_analysis.html.j2
│ │ └── markdown_report.md.j2
│ ├── report_generator.py # Main report engine
│ ├── narrative_writer.py # LLM-driven text generation
│ └── exporters/
│ ├── html_exporter.py
│ ├── pdf_exporter.py # Using WeasyPrint or similar
│ └── markdown_exporter.py
Phase 7: NX MCP Enhancement
Timeline: 4 weeks Status: 🔵 Not Started Goal: Deep NX integration via Model Context Protocol
Deliverables
-
NX Documentation MCP Server
- Index full Siemens NX API documentation
- Semantic search across NX docs (embeddings + vector DB)
- Code examples from official documentation
- Auto-suggest relevant API calls based on task
-
Advanced NX Operations
- Geometry manipulation library
- Parametric CAD automation (change sketches, features)
- Assembly management (add/remove components)
- Advanced meshing controls (refinement zones, element types)
- Multi-physics setup
- Thermal-structural coupling
- Modal analysis
- Fatigue analysis setup
- Geometry manipulation library
-
Feature Bank Expansion
- Library of 50+ pre-built NX operations
- Topology optimization integration
- Generative design workflows
- Each feature documented in registry with examples
Files to Create:
mcp/
├── nx_documentation/
│ ├── __init__.py
│ ├── server.py # MCP server implementation
│ ├── indexer.py # NX docs indexing
│ ├── embeddings.py # Vector embeddings for search
│ └── vector_db.py # Chroma/Pinecone integration
├── nx_features/
│ ├── geometry/
│ │ ├── fillets.py
│ │ ├── chamfers.py
│ │ └── thickness_modifier.py
│ ├── analysis/
│ │ ├── thermal_structural.py
│ │ ├── modal_analysis.py
│ │ └── fatigue_setup.py
│ └── feature_registry.json # NX feature catalog
Phase 8: Self-Improving System
Timeline: 4 weeks Status: 🔵 Not Started Goal: Atomizer learns from usage and expands itself
Deliverables
-
Feature Learning System
- When LLM creates custom function, prompt user to save to library
- User provides name + description
- Auto-update feature registry with new capability
- Version control for user-contributed features
-
Best Practices Database
- Store successful optimization strategies
- Pattern recognition (e.g., "Adding fillets always reduces stress by 10-20%")
- Similarity search (find similar past optimizations)
- Recommend strategies for new problems
-
Continuous Documentation
- Auto-generate docs when new features added
- Keep examples updated with latest API
- Version control for all generated code
- Changelog auto-generation
Files to Create:
optimization_engine/
├── learning/
│ ├── __init__.py
│ ├── feature_learner.py # Capture and save new features
│ ├── pattern_recognizer.py # Identify successful patterns
│ ├── similarity_search.py # Find similar optimizations
│ └── best_practices_db.json # Pattern library
├── auto_documentation/
│ ├── __init__.py
│ ├── doc_generator.py # Auto-generate markdown docs
│ ├── changelog_builder.py # Track feature additions
│ └── example_extractor.py # Extract examples from code
Final Architecture
Atomizer/
├── optimization_engine/
│ ├── core/ # Existing optimization loop
│ ├── plugins/ # NEW: Hook system (Phase 1) ✅
│ │ ├── hook_manager.py
│ │ ├── pre_solve/
│ │ ├── post_solve/
│ │ └── post_extraction/
│ ├── research_agent.py # NEW: Research & Learning (Phase 2)
│ ├── custom_functions/ # NEW: User/LLM generated code (Phase 4)
│ ├── llm_interface/ # NEW: Natural language control (Phase 3)
│ ├── analysis/ # NEW: Result analysis (Phase 5)
│ ├── reporting/ # NEW: Report generation (Phase 6)
│ ├── learning/ # NEW: Self-improvement (Phase 8)
│ └── feature_registry.json # NEW: Capability catalog (Phase 1) ✅
├── knowledge_base/ # NEW: Learned knowledge (Phase 2)
│ ├── nx_research/ # NX-specific patterns and schemas
│ ├── research_sessions/ # Session logs with rationale
│ └── templates/ # Reusable code patterns
├── .claude/
│ └── skills/
│ └── atomizer.md # NEW: Claude skill (Phase 1) ✅
├── mcp/
│ ├── nx_documentation/ # NEW: NX docs MCP server (Phase 7)
│ └── nx_features/ # NEW: NX feature bank (Phase 7)
├── docs/
│ ├── FEATURE_REGISTRY_ARCHITECTURE.md # NEW: Registry design (Phase 1) ✅
│ └── llm/ # NEW: LLM-readable docs (Phase 1)
│ ├── capabilities.md
│ ├── examples.md
│ └── api_reference.md
├── dashboard/ # Existing web UI
└── examples/ # Example projects
Example Use Cases
Use Case 1: Natural Language Optimization Setup
User: "Let's make a new optimization"
LLM: "I'll help you set up a new optimization study. What would you like to name it?"
User: "bracket_weight_reduction"
LLM: "Study created! Please drop your .sim and .prt files into:
C:\Atomizer\optimization_results\bracket_weight_reduction\sim\"
User: "Done. I want to minimize displacement, play with wall_thickness (3-8mm)
and fillet_radius (1-5mm)"
LLM: "Got it! Let me configure:
- Objective: Minimize max displacement
- Design variables:
* wall_thickness: 3.0 - 8.0 mm
* fillet_radius: 1.0 - 5.0 mm
How many iterations would you like? (Recommend 50 for 2 variables)"
User: "50 sounds good"
LLM: "Perfect! Configuration saved. Ready to start optimization?
This will run 50 FEA simulations (estimated time: 2-3 hours)"
User: "Start it!"
LLM: "Optimization launched! 🚀
- Live dashboard: http://localhost:8080/dashboard
- Study: bracket_weight_reduction
- Status: Trial 1/50 running..."
Use Case 2: Custom Metric via LLM
User: "Let's implement a function to calculate the RSS of stress and displacement"
LLM: "I'll create a Root Sum Square (RSS) function for you. Let me confirm:
RSS = sqrt(stress² + displacement²)
Should I normalize the metrics first? (Recommended for different units)"
User: "Yes, normalize to their targets"
LLM: "Creating custom objective function... Done!
File: optimization_engine/custom_functions/rss_stress_displacement.py
def rss_objective(stress, displacement, stress_target=200, disp_target=1.0):
norm_stress = stress / stress_target
norm_disp = displacement / disp_target
return sqrt(norm_stress**2 + norm_disp**2)
Added to feature registry. You can now use 'rss_stress_displacement'
as an objective in your optimization config."
Use Case 3: Surrogate Model Usage
User: "Can you use the surrogate model to predict stress for these parameters:
wall_thickness = [3.5, 4.0, 4.5, 5.0, 5.5]"
LLM: "Checking surrogate model quality...
Surrogate Model Status:
- Training data: 50 trials
- R² score: 0.94 (excellent)
- CV score: 0.91 (good generalization)
- Confidence: HIGH ✓
Predictions:
| Thickness | Predicted Stress | Confidence Interval |
|-----------|------------------|---------------------|
| 3.5 mm | 245.2 MPa | ±12.3 MPa |
| 4.0 mm | 198.7 MPa | ±8.1 MPa |
| 4.5 mm | 165.4 MPa | ±7.2 MPa |
| 5.0 mm | 142.1 MPa | ±9.5 MPa |
| 5.5 mm | 126.8 MPa | ±11.8 MPa |
Note: 4.0mm appears optimal (stress closest to 200 MPa target)"
Use Case 4: Optimization Report
User: "Make an optimization report for bracket_weight_reduction"
LLM: "Generating comprehensive optimization report...
Analyzing 50 completed trials...
Writing narrative insights...
Generating plots...
Report complete!
📄 HTML: optimization_results/bracket_weight_reduction/report.html
📄 PDF: optimization_results/bracket_weight_reduction/report.pdf
Key Findings:
- Best design: Trial #34
* wall_thickness = 4.2 mm
* fillet_radius = 3.1 mm
* Displacement = 0.78 mm (22% below target)
* Mass = 0.51 kg (18% lighter than baseline)
- Sensitivity: Thickness has 3x more impact than fillet radius
- Recommendation: Lock thickness at 4.2mm, explore other variables
Open report? [Y/n]"
Success Metrics
Phase 1 Success ✅
- Hook system operational with 5 plugins created and tested
- Plugin auto-discovery and registration working
- Comprehensive logging system (trial logs + optimization log)
- Studies folder structure established with documentation
- Path resolution system working across all test scripts
- Integration tests passing (hook validation test)
Phase 2 Success (Research Agent)
- LLM detects knowledge gaps by searching feature registry
- Interactive research workflow (ask user for examples first)
- Successfully learns NX material XML schema from single user example
- Knowledge persisted across sessions (research session logs retrievable)
- Template library grows with each research session
- Second similar request uses learned template (instant generation)
Phase 3 Success (LLM Integration)
- LLM can create optimization from natural language in <5 turns
- 90% of user requests understood correctly
- Zero manual JSON editing required
Phase 4 Success (Code Generation)
- LLM generates 10+ custom functions with zero errors
- All generated code passes safety validation
- Users save 50% time vs. manual coding
Phase 5 Success (Analysis & Decision Support)
- Surrogate quality detection 95% accurate
- Recommendations lead to 30% faster convergence
- Users report higher confidence in results
Phase 6 Success (Automated Reporting)
- Reports generated in <30 seconds
- Narrative quality rated 4/5 by engineers
- 80% of reports used without manual editing
Phase 7 Success (NX MCP Enhancement)
- NX MCP answers 95% of API questions correctly
- Feature bank covers 80% of common workflows
- Users write 50% less manual journal code
Phase 8 Success (Self-Improving System)
- 20+ user-contributed features in library
- Pattern recognition identifies 10+ best practices
- Documentation auto-updates with zero manual effort
Risk Mitigation
Risk: LLM generates unsafe code
Mitigation:
- Sandbox all execution
- Whitelist allowed imports
- Code review by static analysis tools
- Rollback on any error
Risk: Feature registry becomes stale
Mitigation:
- Auto-update on code changes (pre-commit hook)
- CI/CD checks for registry sync
- Weekly audit of documented vs. actual features
Risk: NX API changes break features
Mitigation:
- Version pinning for NX (currently 2412)
- Automated tests against NX API
- Migration guides for version upgrades
Risk: User overwhelmed by LLM autonomy
Mitigation:
- Confirm before executing destructive actions
- "Explain mode" that shows what LLM plans to do
- Undo/rollback for all operations
Last Updated: 2025-01-16 Maintainer: Antoine Polvé (antoine@atomaste.com) Status: 🟢 Phase 1 Complete | 🟡 Phase 2 (Research Agent) - NEXT PRIORITY
For Developers
Active development tracking: See DEVELOPMENT.md for:
- Detailed todos for current phase
- Completed features list
- Known issues and bug tracking
- Testing status and coverage
- Development commands and workflows