Most AI coding tools start with code.
NAEOS starts one layer earlier: the engineering specification.
The idea behind NAEOS is simple:
Specify the system once. Build, validate, and evolve it through a consistent engineering pipeline.
But implementing that idea requires more than a project generator.
It requires an architecture that can understand engineering intent, transform it into a machine-readable model, validate it against rules, produce execution plans, generate artifacts, and keep AI agents aligned with the same system model.
This article explains the architecture behind NAEOS and why it is designed more like an engineering operating system than a traditional code generator.
The Problem With Code-First AI Engineering
Modern AI coding agents are remarkably capable.
Give an agent a prompt such as:
Build a payment service with authentication,
PostgreSQL, REST APIs, and a background worker.
It can produce a significant amount of code.
But there is a deeper problem.
Where does the engineering intent live after the code has been generated?
Consider a system with:
- 20 modules
- 15 services
- 40 APIs
- multiple databases
- infrastructure dependencies
- security requirements
- architectural constraints
- multiple AI agents
If the system is represented primarily through source code and prompts, the engineering model becomes fragmented.
You may have:
Source Code
Documentation
Architecture Diagrams
Configuration
AI Instructions
CI/CD Configuration
Infrastructure
Developer Knowledge
Each contains part of the truth.
The result is engineering drift.
A Different Model
NAEOS introduces a different abstraction:
Engineering Specification
│
▼
NAEOS Pipeline
│
┌────────────┴────────────┐
│ │
▼ ▼
NEIR Governance
│ │
└────────────┬────────────┘
▼
Execution Plan
│
┌─────────────┼─────────────┐
▼ ▼ ▼
Generator AI Compiler Context
│ │ │
└─────────────┴─────────────┘
│
▼
Artifacts
The specification becomes the starting point.
Code, AI instructions, documentation, and other artifacts become outputs derived from the engineering model.
This is the fundamental architectural decision behind NAEOS.
The NAEOS Pipeline
At the core of NAEOS is a staged engineering pipeline:
Specification
│
▼
Parser
│
▼
Normalizer
│
▼
Resolver
│
▼
NEIR
│
▼
Validator
│
▼
Scheduler
│
▼
Generators
│
├───────────────┐
▼ ▼
Artifacts AI Context
The current implementation exposes these responsibilities as separate components in the repository, including specification parsing, normalization, resolution, NEIR construction, validation, scheduling, generation, governance, and AI compilation.
The important property is separation of concerns.
A parser should not decide architectural policy.
A generator should not redefine the system model.
An AI adapter should not become the source of truth.
Each stage has a specific responsibility.
1. Specification
Everything starts with a declarative specification.
For example:
project: payments
architecture:
pattern: hexagonal
modules:
- name: identity
- name: payments
dependencies:
- identity
services:
- name: api
kind: http
port: 8080
generation:
languages:
- go
- typescript
The specification describes what the system is supposed to be.
It does not need to contain every implementation detail.
The goal is to establish a structured engineering intent that downstream components can understand.
NAEOS Specification Language v2 also supports features such as variable interpolation, environment variables, references, multi-file composition, functions, conditionals, and schema versioning.
2. Parser
The parser converts the external representation into an internal structure.
Conceptually:
YAML / JSON / HCL
│
▼
Parser
│
▼
Structured Data
This layer should answer:
Is this specification syntactically understandable?
It should not answer:
Is this architecture acceptable?
That distinction becomes important as the system grows.
3. Normalization
Different specifications can express the same concept in different ways.
Normalization creates a consistent representation.
Input A ─┐
├──> Normalizer ──> Canonical Model
Input B ─┘
For example, aliases, defaults, optional fields, and equivalent representations can be normalized before deeper processing.
This makes downstream processing significantly more predictable.
4. Resolution
Specifications frequently contain relationships.
For example:
modules:
- name: payments
dependencies:
- identity
The resolver must understand what identity refers to.
The same principle applies to:
- references
- dependencies
- profiles
- templates
- configuration
- imported specifications
Conceptually:
Normalized Specification
│
▼
Resolver
│
▼
Resolved Engineering Model
5. NEIR
This is where NAEOS becomes particularly interesting.
NEIR — NAEOS Engineering Intermediate Representation — is the central engineering model.
Instead of allowing every subsystem to interpret the original specification independently, NAEOS creates a shared intermediate representation.
Specification
│
▼
┌──────────────┐
│ NEIR │
└──────────────┘
│ │ │
┌────────┘ │ └────────┐
▼ ▼ ▼
Generator Validator AI Compiler
│ │ │
▼ ▼ ▼
Code Policy Instructions
The repository describes NEIR as representing the broader engineering system, including project, architecture, domain, modules, components, services, APIs, storage, infrastructure, security, AI, documentation, deployment, testing, and metadata.
This gives NAEOS a common semantic layer.
Why an Intermediate Representation Matters
Compiler engineers have used intermediate representations for decades.
A compiler does not normally translate every source language directly into every machine architecture.
Instead:
Source
│
▼
AST
│
▼
Intermediate Representation
│
▼
Optimization
│
▼
Target
NAEOS applies a similar idea to software engineering.
Instead of:
Specification → Generator
Specification → AI Agent
Specification → Documentation
Specification → Validation
we can have:
Specification
│
▼
NEIR
┌────────┼────────┐
▼ ▼ ▼
Generator Validator AI Compiler
│ │ │
▼ ▼ ▼
Code Policy AI Context
The intermediate representation becomes the common language between engineering capabilities.
6. Validation
Once the system has been represented as NEIR, NAEOS can reason about it.
For example:
Module A
│
└── depends on → Module B
The validator can detect architectural problems such as:
- circular dependencies
- invalid module boundaries
- conflicting ports
- invalid references
- policy violations
This is fundamentally different from asking an AI model:
"Does this architecture look correct?"
The validator can enforce deterministic rules.
7. Scheduling
Engineering operations often form a dependency graph.
For example:
Database
│
▼
Domain
│
▼
Application
│
▼
API
│
▼
Tests
NAEOS can represent execution as a DAG:
Task A ─────┐
▼
Task C
▲
Task B ─────┘
This allows independent operations to execute independently while respecting dependencies.
The repository describes the scheduler as DAG-based task scheduling.
8. Generation
Once the system has passed validation, generators can produce artifacts.
The important distinction is:
The generator consumes the engineering model.
It does not redefine the engineering model.
Conceptually:
NEIR
│
┌──────────┼──────────┐
▼ ▼ ▼
Go TypeScript Python
│ │ │
▼ ▼ ▼
Artifact Artifact Artifact
The current NAEOS repository lists generators for multiple languages, including Go, TypeScript, Python, Java, and Rust.
9. AI Compilation
This is another important architectural boundary.
NAEOS does not have to replace AI coding agents.
Instead, it can compile engineering context into instructions understood by different AI development environments.
The architecture becomes:
NEIR
│
▼
AI Compiler
│
┌─────────────┼─────────────┐
▼ ▼ ▼
Claude Code Cursor Copilot
│ │ │
▼ ▼ ▼
Instructions Rules Instructions
The repository currently includes adapters for tools such as GitHub Copilot, Claude Code, Cursor, Gemini CLI, Codex, OpenCode, and Windsurf.
This leads to an important architectural principle:
AI agents should consume the engineering model rather than become the engineering model.
Prompt Is Not Policy
This distinction becomes critical when AI agents can modify real systems.
A prompt might say:
Do not modify the payment database.
But a prompt is not a reliable security boundary.
A stronger architecture is:
AI Agent
│
│ request
▼
NAEOS Control Layer
│
├── Policy
├── Validation
├── Authorization
└── Audit
│
▼
Allowed Action
The agent can be highly capable without being given unrestricted authority.
This is one of the reasons an engineering operating system needs a control layer rather than simply an AI interface.
Governance as an Engineering Layer
NAEOS also treats governance as part of the engineering pipeline.
Conceptually:
Specification
│
▼
NEIR
│
▼
Policies
│
▼
Validation
│
▼
Artifact Review
│
▼
Approved Output
The repository currently includes policy evaluation, artifact review, and audit-trail capabilities.
This changes governance from documentation into something closer to an executable engineering mechanism.
Instead of:
"Our architecture follows these rules."
the system can move toward:
"These rules are machine-readable and evaluated during engineering execution."
The Kernel
Underneath these capabilities is the NAEOS kernel.
The repository describes the kernel as providing foundational runtime services such as:
- service registry
- event bus
- telemetry
- lifecycle management
This gives the higher-level pipeline a common runtime foundation.
The resulting architecture can be viewed as:
┌───────────────────────────────────────────┐
│ NAEOS Applications │
│ │
│ CLI │ AI │ Generator │ Governance │ MCP │
├───────────────────────────────────────────┤
│ Engineering Pipeline │
│ │
│ Parse → Normalize → Resolve → NEIR │
│ → Validate → Schedule │
├───────────────────────────────────────────┤
│ Kernel │
│ │
│ Registry │ Events │ Telemetry │ Lifecycle │
├───────────────────────────────────────────┤
│ Runtime / Platform │
└───────────────────────────────────────────┘
Extensibility
An engineering operating system cannot be closed around a single implementation strategy.
NAEOS therefore exposes extensibility through plugins, profiles, templates, marketplace components, and other adapters.
The repository includes a plugin SDK with a WASM runtime, profile and plugin marketplace capabilities, and multiple built-in industry profiles.
The architectural goal is:
NAEOS Core
│
┌──────────────┼──────────────┐
▼ ▼ ▼
Plugins Profiles Adapters
│ │ │
▼ ▼ ▼
WASM Domain Context AI Tools
The core remains stable while capabilities can evolve around it.
The Full Architecture
Putting the pieces together:
Developer
│
▼
Engineering Spec
│
▼
Parser
│
▼
Normalizer
│
▼
Resolver
│
▼
NEIR
│
┌────────────────┼────────────────┐
│ │ │
▼ ▼ ▼
Governance Validation Context
│ │ │
└────────────────┼────────────────┘
▼
Scheduler
│
┌─────────────┼─────────────┐
│ │ │
▼ ▼ ▼
Generator AI Compiler Plugins
│ │ │
▼ ▼ ▼
Code AI Context Extensions
│ │ │
└─────────────┼─────────────┘
▼
Artifacts
│
▼
Verification
│
▼
Engineering
System
This is the architectural idea behind NAEOS.
Not:
Prompt → Code
But:
Intent
↓
Specification
↓
Engineering Model
↓
Governance
↓
Execution
↓
Artifacts
↓
Verification
Why This Architecture Matters
AI has dramatically reduced the cost of generating code.
But code generation is only one part of software engineering.
Large engineering systems still require:
- architecture
- constraints
- dependency management
- validation
- security
- governance
- reproducibility
- documentation
- testing
- traceability
- controlled execution
The challenge is therefore shifting.
The question is no longer:
"Can AI write the code?"
The more important question becomes:
"Can we give AI enough capability to build software without losing control of the engineering system?"
NAEOS explores one possible answer.
Create a machine-readable engineering model.
Make it the common source of truth.
Put deterministic validation and governance around it.
Then allow generators, AI agents, plugins, and other tools to operate against that model.
The Core Principle
The architecture can ultimately be summarized in one sentence:
AI should accelerate engineering execution, but the engineering system should remain the authority.
That distinction is at the center of NAEOS.
The project is open source and actively evolving, with the current repository documenting the implementation, architecture, specifications, CLI, governance, AI integration, plugin system, and runtime components.
If this direction is interesting, the next question is much more technical:
How exactly does NEIR work?
That will be the subject of the next article.
Next
Part 2 — NEIR: The Intermediate Representation at the Center of NAEOS
We will go inside the NEIR model, examine why an engineering IR is necessary, and explore how one representation can become the foundation for validation, generation, governance, and AI context.
Top comments (0)