A Five-Layer Architecture Lens
The diagram organizes each assistant into five practical layers. I find this more useful than comparing individual buttons or model names because the same architecture applies to how an engineering organization evaluates an AI development platform.
1Developer Experience
This is where the engineer interacts with the system: an IDE, terminal, desktop/web application, inline editor, specification workflow, or mobile interface. The experience influences how naturally AI participates in daily engineering work.
2Configuration & Context
This is one of the most important enterprise layers. Project instructions, steering documents, repository context, reusable skills, hooks, MCP connectors, and tool definitions tell the assistant what the environment looks like and how it is expected to behave.
3Agent Orchestration
As assistants become more autonomous, a single prompt can become a multi-step workflow: plan, analyze, code, test, review, research, invoke a tool, inspect the result, and continue. Whether these steps appear as explicit subagents or are implemented internally, the architectural idea is the same—reasoning becomes a workflow rather than a single response.
4Model & Tool Layer
Models provide reasoning and code generation, but tools allow the agent to act. Repository access, shell commands, file operations, APIs, databases, cloud services, MCP servers, and secure execution environments are what turn an assistant from a conversational system into an engineering agent.
5Execution Environment
The final layer answers a critical production question: where does the work actually run? Local machines, IDE terminals, cloud sandboxes, remote development environments, Git integrations, and CI/CD systems each have different implications for credentials, security, reproducibility, and governance.
AWS Kiro: IDE-Centered Agentic Engineering
I see Kiro as especially interesting when the objective is to make AI part of a structured engineering workflow rather than add a chat window beside the code.
The concepts that matter most to me are steering, specifications, hooks, reusable capabilities, agent workflows, and external context. Together they allow a team to move repeatable engineering knowledge out of individual prompts and into version-controlled project instructions.
For example, in a data-platform modernization workspace, steering documents can describe the medallion architecture, repository layout, naming standards, pipeline configuration conventions, framework boundaries, testing expectations, and rules such as “do not modify shared framework components unless the change is intentional.” Instead of re-explaining those constraints every time, the agent begins each task with a stronger understanding of the engineering environment.
Hooks add another dimension because they can connect agentic behavior to development events. A team can think about validations or analysis that should happen when certain actions occur, while reusable skills or powers can package common modernization tasks such as creating a pipeline skeleton, analyzing a source system, checking configuration structure, or preparing implementation artifacts.
Where I see the strongest Kiro pattern
Treat the IDE as an agentic engineering workspace: standards are codified as context, common activities become reusable capabilities, external systems are exposed through controlled connectors, and developers remain responsible for reviewing and shipping the result.
Claude Code: Deep Reasoning Across a Working Codebase
Claude Code represents a different but complementary pattern: an AI assistant that can reason deeply over a project, use tools, work from project instructions, and execute multi-step development tasks from the terminal or coding environment.
The architectural idea I care about is not a specific UI element. It is the combination of project-level instructions + codebase context + tools + iterative reasoning. That combination is valuable for tasks where the assistant must understand how multiple files, modules, configurations, and dependencies interact before proposing a change.
In a modernization scenario, that could mean reading a legacy DAG, locating the related SQL, tracing operators and environment dependencies, comparing the implementation with a new framework convention, generating a migration plan, and then making a controlled set of changes. That is substantially different from asking a chatbot to “convert this Python file.”
Claude also makes the broader lesson visible: agentic coding is becoming less about a single generated snippet and more about maintaining working context across an engineering task.
Codex: Coding Agent Across Chat, CLI, IDE, and Sandbox
Codex adds another useful pattern: bringing an autonomous coding agent across several surfaces—ChatGPT, terminal/CLI, IDE integrations, repository workflows, and secure or remote execution environments.
What interests me architecturally is the separation between the user interaction layer and the execution layer. An engineer can describe the task at a high level, while the agent can inspect project context, invoke tools, modify files, run tests, and return a concrete result. That creates opportunities for asynchronous engineering work, especially when tasks are well bounded and validation is automated.
For enterprise teams, the usefulness of that pattern depends on how carefully the task boundary is defined. “Refactor this module and run its tests” is much safer than “modernize the platform.” Good agentic work starts with clear scope, visible artifacts, deterministic checks, and a reviewable Git diff.
MCP Changes the Meaning of “Context”
Model Context Protocol is important because enterprise engineering context does not live only in source code.
It lives in Snowflake schemas and query history, Jira stories, Confluence standards, Git repositories, cloud resources, observability systems, APIs, data catalogs, and internal documentation. Without access to those systems, an AI assistant can reason only from the context copied into the prompt or stored locally.
MCP provides a standardized way to expose tools and context to an AI application. From an architecture perspective, that makes it possible to move toward workflows such as:
Snowflake analysis
Inspect metadata, understand tables and schemas, review SQL patterns, and support source-to-target analysis before modernization.
Jira context
Read the engineering story, acceptance criteria, dependencies, and ownership information before generating implementation work.
Repository context
Understand branch structure, shared framework code, existing pipeline examples, and conventions before making changes.
Operational context
Use logs, run history, observability data, and deployment information to help analyze failures or recommend improvements.
This is where the idea of an AI assistant starts to evolve into an enterprise engineering agent. But MCP should not be treated as unrestricted access. Each connector needs authentication, least-privilege authorization, logging, approved tool boundaries, and careful separation between read-only analysis and actions that can change production systems.
How I Apply This to a Modernization Workflow
A useful way to understand the architecture is to follow one realistic modernization task from beginning to end. Consider an existing Airflow pipeline that must be migrated into a standardized DAG Factory while preserving the business logic.
Step 1 — Understand before generating
The agent first needs context: the legacy DAG, related SQL, source and target tables, framework conventions, current scheduling behavior, error handling, and any Jira or design documentation. AI is most valuable here as an accelerator for discovery and analysis.
Step 2 — Map the workload to the target pattern
The next task is architectural: identify which pieces map to reusable framework operators and which remain workload-specific. A source may be SFTP, Teradata, API, or S3; transformations may use standard staging and EDS patterns or contain custom business logic such as SCD Type 2 or Type 4 behavior.
Step 3 — Generate bounded artifacts
Once the target pattern is understood, the assistant can help create or update YAML configuration, SQL assets, documentation, tests, or a pipeline specification. The shared framework should not be casually rewritten for every workload.
# Example conceptual pipeline configuration
version: v1
pipeline:
name: marketing_customer_activity
schedule: "0 6 * * *"
owner: data-engineering
source:
type: s3
path: s3://enterprise-data/marketing/customer_activity/
processing:
stage_sql: sql/stage/customer_activity.sql
eds_sql: sql/eds/customer_activity.sql
natural_keys:
- customer_id
- event_id
quality:
row_count_validation: true
duplicate_key_validation: true
notifications:
on_failure: standard_email_hook
Step 4 — Validate with the platform, not only with the model
Generated output must be validated by real systems: schema checks, Airflow parsing, unit tests, SQL execution, Snowflake results, CI/CD policies, and clean DAG runs. The model can help write tests, but it should not be the source of truth for whether the implementation is correct.
Step 5 — Capture the learning
If the migration reveals a reusable rule, it should move into steering documentation, a shared skill, a framework component, a template, or another governed artifact. That is how AI-assisted engineering compounds over time instead of repeating the same prompt in every developer session.
How I Compare the Three
I would not choose one of these tools based only on a leaderboard or model benchmark. I would evaluate them against the engineering workflow I need to support.
| Architecture Dimension |
AWS Kiro |
Claude Code |
Codex |
| Primary experience |
Agentic IDE and structured development workflow |
Deep codebase work through coding/terminal workflows |
Agentic coding across ChatGPT, CLI, IDE, and remote execution |
| Persistent guidance |
Strong emphasis on steering, specs, hooks, reusable capabilities |
Project instructions and persistent codebase context |
Project instructions, repository context, task-specific guidance |
| Best enterprise question |
How do we standardize AI-assisted engineering inside the IDE? |
How do we let an agent reason deeply across an existing codebase? |
How do we delegate bounded coding tasks across multiple execution surfaces? |
| External systems |
MCP and enterprise/cloud integrations |
Tools and MCP integrations |
Tools, repository integrations, MCP-capable workflows |
| Architecture focus |
Developer workflow + reusable team context |
Reasoning + tool use + project understanding |
Delegation + execution + reviewable output |
The exact product capabilities will continue to evolve. The more durable comparison is the architecture: how the product acquires context, how it is instructed, what tools it can invoke, where work executes, and how engineers verify the result.
Production Guardrails Matter More as Agents Become Stronger
More autonomy does not remove the need for engineering discipline. It increases it. The stronger the agent becomes, the more important it is to define what the agent is allowed to see, modify, execute, and deploy.
Least privilege
Use narrowly scoped credentials and separate read-only analysis from write or deployment privileges.
Version-controlled instructions
Store engineering standards, steering, templates, and agent guidance with the project whenever practical.
Human review
Require review for architecture decisions, production SQL, framework changes, security-sensitive code, and deployments.
Deterministic validation
Use tests, schema validation, linting, CI/CD controls, query results, and observability rather than trusting generated explanations.
Auditability
Capture important actions, tool calls, code changes, approvals, and deployment history where enterprise controls require it.
Clear framework boundaries
Prevent an agent from “fixing” shared platform code merely because a single workload does not fit the standard path.
Key Takeaways
My biggest takeaway is that AI coding assistants should be evaluated as part of the engineering architecture, not as standalone productivity tools.
First, context is becoming a platform capability. Steering documents, project instructions, repositories, MCP servers, data platforms, and operational systems together determine how useful an agent can be.
Second, the harness around the model is increasingly important. Tools, hooks, skills, execution environments, sandboxes, repository access, tests, and workflow orchestration convert model intelligence into repeatable engineering behavior.
Third, enterprise modernization is an excellent use case for agentic development—but only when tasks are bounded. AI can accelerate analysis, migration planning, configuration generation, SQL review, documentation, testing, and repetitive implementation. Architecture judgment and production accountability still belong to the engineering team.
Finally, the long-term opportunity is not to replace developers with agents. It is to build an engineering environment where standards, platform knowledge, tooling, and AI work together so that developers spend less time rediscovering context and more time making the decisions that actually require engineering judgment.
Architecture principle
Use AI to scale engineering knowledge and repetitive execution. Keep architecture boundaries, validation, security, and production accountability explicit.
About this series
This Architecture Brief is part of a series on enterprise data modernization, Snowflake, Airflow, cloud platforms, AI-assisted engineering, agentic AI, and MCP-based enterprise architecture.
← Back to Insights