Learning a Framework Changed in the AI Era — and Kora Fits the New Model¶
August 19, 2026
For most of the history of software frameworks, learning meant accumulation.
A developer started with a tutorial, copied a starter application, read some documentation, searched for examples, hit several confusing failures, found answers in forums or on Stack Overflow, and gradually built a mental model of how the framework really behaved. The process could take weeks before basic fluency emerged and months or years before the developer understood where the abstractions ended and the runtime machinery began.
That learning model was so normal that the friction around it became almost invisible.
A mature framework was expected to come with an enormous secondary knowledge system: tutorials, books, conference talks, blog posts, Q&A archives, migration guides, sample repositories, internal company documentation, and experienced colleagues who knew which parts of the official story were incomplete. Learning the framework meant learning how to navigate that ecosystem.
The traditional path looked roughly like this:
That model is changing quickly.
An AI coding agent can now sit inside the repository with the developer. It can read the framework documentation, inspect the application's exact dependencies, open generated source files, trace types, search the framework implementation, run compilation, interpret diagnostics, write an example, execute tests, compare two approaches, and explain the result in the vocabulary of the current project.
The learning loop becomes much more direct:
AI-assisted learning model
Question
↓
Agent reads docs + source + generated code
↓
explains exact mechanism
↓
writes example
↓
compiler validates
↓
developer understands and reviews
This changes what makes a framework easy or difficult to learn.
The old learning model rewarded ecosystems with vast quantities of pre-existing explanatory material. The new model still benefits from documentation and examples, but it places more value on something deeper: whether the framework itself is inspectable enough for an agent to reconstruct what is actually happening.
That is where Kora is particularly interesting.
Kora 2 is a Java and Kotlin backend framework built around compile-time dependency injection, compile-time code generation, strong typing, thin abstractions, and a deliberately coherent programming model. Its documentation states that more than 95 percent of framework functionality is covered by documentation, guides, and examples. Its generated classes are human-readable. Its application graph is checked and produced during compilation. HTTP handlers, repositories, mappings, validation, resilience, caching, and other framework concerns can be inspected as generated source. Its abstractions remain close to familiar Java, Kotlin, JDBC, HTTP, Kafka, gRPC, and OpenTelemetry concepts. The project also provides an official Kora Skill package specifically intended to give coding agents version-aware framework context and conventions.
Individually, none of these properties is revolutionary.
Together, they fit the new learning model unusually well.
The important shift is not that AI can memorize Kora documentation on behalf of the developer. It is that the AI can move continuously between explanation and evidence. When a developer asks what an annotation does, the agent can explain the documentation, compile the code, open the generated implementation, trace the application graph, and show where the behavior actually enters the call path.
That creates a different kind of framework education.
Instead of learning primarily from generalized descriptions of what the framework usually does, the developer can learn from what this exact application has actually generated.
And that leads to a broader principle:
Inspectable framework behavior becomes more valuable, not less, when machines can inspect it on the developer's behalf.
Framework Learning Used to Be Mostly Sequential¶
Traditional framework learning was constrained by the developer's attention.
A tutorial could introduce one concept at a time. Documentation could explain APIs. A book could build a conceptual model. A conference talk could show how the framework worked internally. Stack Overflow could fill gaps. Production experience could reveal the parts that documentation had simplified.
But a developer could only process so much at once.
When learning dependency injection, for example, it was unrealistic to read the entire container implementation before writing the first application. The learner typically accepted a simplified model:
Later, when something went wrong, the developer might learn about scopes, proxies, qualifiers, lifecycle, bean factories, conditional registration, post-processors, classpath scanning, or generated metadata.
The same pattern appeared everywhere.
For transactions:
For HTTP:
For persistence:
For resilience:
The simplified model was useful because humans need progressive disclosure. The problem was that the missing mechanism often returned later as "framework magic."
The gap between the public programming model and the runtime implementation became a tax that developers paid incrementally.
That tax created tribal knowledge.
Experienced developers knew that certain annotations worked only through proxies. They knew that self-invocation could bypass interception. They knew which classpath dependency silently activated another subsystem. They knew which stack traces were misleading, which configuration keys had surprising defaults, and which extension points were safe to customize.
Learning therefore became less about reading the API and more about accumulating exceptions to the API-level mental model.
AI changes this because progressive disclosure no longer has to mean progressive blindness.
A beginner can still start with the simple explanation, but the mechanism behind it can be retrieved instantly when needed.
The learner can ask:
What exactly happens after this annotation is processed?
The agent can answer at the right level of detail.
If the learner asks for more, the agent can open the generated source.
If the learner asks where the generated class is wired, the agent can trace the graph.
If the learner asks why compilation failed, the agent can inspect the diagnostic and related types.
The sequence no longer has to be:
It can become:
That is a profound improvement in how technical knowledge can be acquired.
AI Turns Documentation From Reading Material Into an Interactive Knowledge Base¶
Documentation used to be passive.
The author decided the order, depth, examples, and terminology. The learner searched, scanned, and interpreted. If the explanation assumed too much knowledge, the learner had to leave the page and learn the prerequisite elsewhere. If the explanation was too basic, the expert had to skip ahead.
An AI agent turns the same documentation into an interactive layer.
The developer can ask:
- Explain this section assuming I know Spring but not Kora.
- Show me how this maps to plain Java concepts.
- What generated class should I inspect after compilation?
- Why does this Kotlin class need to be
open? - Where does this repository implementation come from?
- What is the difference between a component and a module?
- Trace this controller from HTTP request to repository.
- Which part of this behavior is Kora and which part is JDBC?
- Is this the canonical Kora approach or merely something that compiles?
- Rewrite this example for my project's package structure.
- Compare this graph error with the documentation and tell me what is missing.
This matters because framework documentation is usually organized around the framework, while questions arise around the application.
The agent bridges the two.
Suppose the documentation explains compile-time dependency injection in general. The learner does not necessarily want another generic explanation. They want to understand why UserService in their
application cannot be constructed.
A useful agent can combine the general rule with the local graph:
official DI model
+
UserService constructor
+
available graph components
+
tags / qualifiers
+
compiler diagnostic
↓
application-specific explanation
That is much closer to tutoring than search.
The agent is not merely retrieving a paragraph. It is contextualizing the framework model against the concrete code the learner is trying to understand.
This is one reason documentation quality matters more in the AI era, not less.
Poor documentation gives the agent a weak authoritative base.
Clear documentation gives the agent a reliable vocabulary and set of invariants that it can then apply to the repository.
Kora's Documentation Is Structured for This New Mode¶
Kora 2's documentation is unusually compatible with this style of learning because it does not stop at API descriptions.
The project presents step-by-step guides, module references, runnable examples, generated-code inspection points, and framework principles as parts of the same learning surface. The landing documentation explicitly positions generated source and compile-time validation as mechanisms for understanding what the framework is doing, and it highlights the official Kora Skills package as an AI-oriented entry point.
That creates several layers of evidence.
Conceptual docs
↓
step-by-step guides
↓
runnable examples
↓
generated source
↓
compiler diagnostics
↓
framework source when needed
An agent can move through these layers in either direction.
For a beginner, it can start with the concept and descend toward implementation.
For an experienced engineer debugging a failure, it can start from generated code or a diagnostic and climb back toward the documented model.
This bidirectional movement is important.
Traditional documentation is often optimized for forward learning:
Real development frequently works backward:
An AI agent is comfortable with both.
That makes frameworks with inspectable mechanics easier to teach during real work rather than only in dedicated learning sessions.
Generated Source Is No Longer Just for Framework Experts¶
Generated source has historically had an image problem.
Many developers associate it with files that should not be touched, unreadable compiler artifacts, giant classes emitted by code generators, or internals that only framework authors should inspect.
That perception made statements such as "you can inspect the generated code if you need to understand what is happening" sound like a weakness.
The implied response was understandable:
Why should I have to read generated code just to understand my framework?
In the AI-assisted development model, that question changes.
The developer may not need to read the generated code personally.
The agent can read it.
This leads to one of the strongest implications of machine-assisted learning:
Even when a developer does not want to read generated code, an AI agent can read it for them and explain the relevant part in plain language.
The important requirement is therefore not that generated code be pleasant enough for every developer to study line by line. The requirement is that it be sufficiently deterministic, readable, and structurally meaningful for tools and humans to inspect when necessary.
Kora's generated source is intentionally close to ordinary Java and Kotlin. That matters.
Consider a declarative HTTP controller.
The learner writes a familiar method with route annotations. After compilation, Kora generates the corresponding HTTP request handler. The agent can inspect the generated handler and explain:
- how path parameters are extracted;
- which request mapper is used;
- where an interceptor enters;
- which executor runs application code;
- how the controller method is called;
- which response mapper converts the result;
- where errors can propagate.
The learner does not need to memorize a hidden routing engine.
They can ask the agent to trace the exact request.
The same applies to validation.
A method annotated for validation is wrapped by generated AOP code. The generated class contains the concrete validators, parameter handling, violation collection, exception flow, and eventual call to the original method.
The learner can ask:
Does validation happen before my controller code or inside JSON mapping?
The agent can inspect the generated implementation and answer from evidence.
Resilience is another excellent example.
A method may combine retry, fallback, timeout, and circuit breaker policies. Merely reading annotations does not always reveal the effective composition order. Kora's guides explicitly point developers toward the generated AOP proxy as the practical place to see how those policies are composed.
An agent can inspect that proxy and explain:
incoming call
↓
outer generated aspect
↓
next resilience policy
↓
method body
↓
success / failure classification
This is a better teaching artifact than a generic statement that "annotations are processed at compile time."
It connects syntax to execution.
The Annotation-to-Implementation Path Can Be Taught Directly¶
Frameworks often become difficult to learn when there is a large discontinuity between declaration and execution.
A developer sees:
The runtime sees something much more complicated.
The educational problem is explaining what exists between those two views.
Kora's compile-time design makes that path relatively concrete:
annotation
↓
annotation processor / KSP
↓
generated subclass or adapter
↓
application graph
↓
compiled application
↓
runtime call
An AI tutor can walk through the chain one step at a time.
It can explain what the annotation declares.
It can identify the processor responsible for it.
It can locate the generated class.
It can show the generated method around the original call.
It can identify graph dependencies injected into the generated class.
It can explain which runtime library objects the generated wrapper delegates to.
It can then relate the result back to the developer's source.
That is much more pedagogically powerful than either extreme:
- treating the annotation as magic;
- forcing the beginner to read compiler processor internals.
The agent acts as a variable-resolution microscope.
The developer can zoom in only as far as necessary.
Compiler Errors Become Interactive Lessons¶
Compilation errors are usually framed as obstacles.
In a compile-time framework, they are also documentation events.
Kora checks the application graph and generated contracts during compilation. Missing dependencies, cycles, ambiguous wiring, invalid aspect requirements, unsupported mappings, and other structural problems can fail before the application starts.
For a developer learning the framework, this provides deterministic feedback.
For an AI agent, deterministic feedback is especially valuable.
A language model can generate a plausible implementation that is wrong. If the only feedback is a runtime failure that appears several layers later, correction becomes difficult. If the compiler produces a direct error tied to a graph or contract problem, the model has a much narrower correction task.
The loop is simple:
developer asks
↓
agent writes code
↓
compiler rejects invalid structure
↓
agent reads diagnostic
↓
agent explains why
↓
agent fixes code
↓
developer sees both rule and solution
This is not only faster implementation.
It is learning through validated iteration.
The developer sees the framework invariant at the moment it becomes relevant.
Suppose a constructor dependency cannot be resolved. Instead of reading an abstract DI chapter and hoping to recognize the issue, the agent can explain:
- which component requires the dependency;
- which type Kora attempted to resolve;
- whether zero or multiple candidates exist;
- whether tags distinguish candidates;
- which module should provide the missing component;
- what generated graph code would look like after the fix.
The framework becomes self-correcting teaching material.
Deterministic Feedback Is Especially Important for AI¶
The combination of probabilistic generation and deterministic validation deserves more attention.
AI agents generate likely answers.
Compilers enforce exact rules.
These are complementary systems.
A framework that exposes more correctness constraints to the compiler effectively creates a tighter learning environment for the agent.
This resembles supervised practice.
A human learner benefits from the same loop, but AI makes the value more visible because the agent can perform many iterations cheaply.
Strong typing compounds the effect.
When HTTP contracts, repository mappings, dependency graph edges, configuration objects, and generated APIs are represented through concrete types, an invalid implementation has fewer places to hide.
The agent's solution space becomes narrower.
That is important because AI does not need infinite flexibility. It benefits from constraints that eliminate wrong branches early.
Strong Typing Becomes a Learning Boundary¶
Type systems are usually discussed in terms of correctness and tooling.
They also shape how quickly a developer can build a mental model.
If a framework communicates important relationships through untyped maps, string names, dynamic lookups, or runtime registration, the learner has to remember those relationships externally.
If relationships appear in constructor signatures, generic parameters, generated interfaces, typed configuration, and compiler-visible contracts, the IDE and compiler continuously reinforce the model.
Kora leans heavily on this style.
A service depends on concrete types.
Repositories expose typed method contracts.
OpenAPI generation can produce typed client and server interfaces.
Configuration is mapped into typed objects.
Dependency graph construction is compile-time checked.
AOP-generated wrappers have normal constructor dependencies.
The result is that the structure a developer is trying to learn is represented in the language itself.
An AI agent benefits from exactly the same representation.
It can follow symbol references, constructor parameters, method signatures, and generated types more reliably than it can reconstruct relationships from hidden runtime registries.
This gives strong typing a new role:
strong types
↓
narrower possible interpretations
↓
more reliable agent explanation
↓
clearer developer mental model
The framework is not simply preventing errors.
It is limiting ambiguity.
"One Problem, One Solution" Has Educational Value¶
A framework can be powerful and still be difficult to learn because it contains too many valid ways to express the same idea.
Large ecosystems accumulate generations.
A new developer may encounter several dependency injection styles, old and new configuration systems, multiple HTTP clients, several persistence abstractions, imperative and reactive APIs, annotation-based and functional routing, alternative testing models, and multiple extension mechanisms.
For experts, this can be useful flexibility.
For learners, it creates branching.
Need to call HTTP service
↓
Which client?
↓
Which programming model?
↓
Which generation of docs?
↓
Which integration style?
↓
Which test model?
AI does not remove this ambiguity.
In some cases, it amplifies it because the model has seen examples from every generation and may combine them.
Kora's philosophy of providing one clear recommended approach per problem reduces this branching factor.
That matters both for implementation and education.
The learner asks:
How should I create a repository in Kora?
A good answer should converge quickly toward the canonical repository model.
The learner asks:
How should I expose an HTTP endpoint?
The documentation and agent can point toward the same controller and mapping model.
The learner asks:
How is resilience added?
The answer uses the same compile-time AOP mechanism that also explains caching, validation, transactions, and other cross-cutting behavior.
Conceptual reuse accelerates learning.
Once the developer understands one generated AOP wrapper, several other framework features become easier to understand because they reuse the same mechanism.
That is much more efficient than learning unrelated subsystems independently.
A Small Conceptual Surface Multiplies AI's Teaching Value¶
Framework learning is not proportional to API count.
The harder variable is the number of distinct mental models required.
A framework with many classes but a small number of consistent concepts can be easier to learn than a framework with fewer classes but many special cases.
Kora's application graph is a good example.
The graph is not merely the DI implementation.
It also becomes the organizing model for:
- component construction;
- lifecycle;
- configuration;
- module composition;
- test graph modification;
- generated infrastructure;
- application startup;
- dependency relationships.
This gives an AI tutor a strong anchor.
When introducing a new feature, the agent can repeatedly connect it back to the same graph:
HTTP server
↓
components in graph
Repository
↓
generated component in graph
Resilience policy
↓
component used by generated AOP class
Configuration
↓
typed component in graph
Test override
↓
graph modification
The learner does not need a separate ontology for every subsystem.
They learn how each subsystem participates in the application model.
This is precisely the kind of consistency that makes interactive learning effective.
The Application Graph Becomes a Teaching Map¶
Dependency injection is often taught as a convenience mechanism:
Instead of constructing objects manually, the framework constructs them for you.
That description is correct but incomplete.
In Kora, the compile-time application graph is much more useful as a learning model because it exposes the architecture of the application.
A newcomer can ask the agent:
Walk me through the graph starting from the HTTP server.
The agent can trace:
Then it can enrich the path with framework components:
HTTP request
↓
request mapper
↓
interceptor
↓
generated handler
↓
controller
↓
generated AOP wrapper
↓
service
↓
generated repository
↓
connection factory / JDBC
This is more than API education.
It teaches architecture from the live system.
If the project is modular, the agent can explain which graph components originate from which Gradle module.
If tags are used, it can explain why a particular candidate was selected.
If ValueOf<T> or similar indirection is involved, it can explain lifecycle-sensitive access.
If tests replace a graph component, it can show which production edge is being substituted.
The application graph becomes a navigable map of the system.
That is an excellent way for a newcomer to learn both Kora and the application simultaneously.
Learning the Framework and Learning the Codebase Merge¶
This may be one of the most important changes brought by AI.
Historically, framework learning and project onboarding were often separate activities.
A developer learned Spring, Quarkus, Micronaut, Ktor, or another framework through external material. Then they joined a codebase and learned how that team used the framework.
The two models frequently diverged.
The framework allowed ten approaches.
The team used two.
The framework documentation showed generic examples.
The project had internal conventions.
The framework had defaults.
The platform team overrode them.
The new developer therefore had to learn both the framework and the local dialect.
An AI agent can merge these activities.
It can say:
Kora supports this concept in the following way. In this repository, the team uses it here, here, and here. The generated implementation for your service is located here. The test convention is demonstrated in these classes. The current module uses this configuration prefix. This other pattern is supported by Kora but is not used in this codebase.
That is a qualitatively different onboarding experience.
The learner is not acquiring "Kora in general" and later translating it into the project.
They are learning Kora through the project.
Source Code Becomes a Practical Documentation Layer¶
Reading framework source used to be a specialized skill.
It still can be difficult, especially in large codebases, but AI changes the cost dramatically.
The developer no longer needs to navigate the entire implementation manually.
They can ask narrow questions:
- Which processor generates this class?
- Where is this annotation handled?
- What interface does this runtime component implement?
- Where is this default timeout chosen?
- Why does this generated repository use this mapper?
- How is the application graph initialized?
- Which code converts this compiler model into generated Java?
- Is this behavior enforced by Kora or by the underlying library?
The agent can search the source tree and return the relevant path.
This makes source transparency more valuable.
A framework whose source has reasonably direct mappings between concepts and implementation gives the agent better evidence.
Kora's design helps because many runtime layers are thin. The generated code often delegates to real underlying technologies rather than to a deep framework-specific runtime.
For learning, that means the explanation can stop at a familiar boundary.
For example:
rather than:
repository abstraction
↓
framework query model
↓
framework execution model
↓
adapter
↓
driver abstraction
↓
JDBC
The shorter chain is easier to inspect and easier to teach.
Thin Abstractions Let Existing Knowledge Transfer¶
A new framework is easier to learn when it does not require unlearning the platform.
Kora intentionally stays close to familiar Java and Kotlin concepts and to widely used backend technologies. That gives experienced developers a large amount of transferable knowledge.
If a developer already understands JDBC, they do not need to replace that model with an entirely unrelated persistence runtime.
If they understand HTTP request/response flow, the generated handler can be explained using those concepts.
If they understand Kafka consumers, gRPC services, OpenTelemetry, or structured logging, Kora's integration layer can be taught as wiring and adaptation around those technologies rather than a separate replacement model.
This is especially powerful with AI.
A model has broad knowledge of standard technologies.
The more a framework preserves those semantics, the more the agent can reuse its general engineering knowledge instead of relying on framework-specific memorization.
The learning path becomes:
rather than:
This reduces cognitive overhead for both human and agent.
The Kora Skill Formalizes Framework-Specific Context¶
General-purpose AI knowledge is useful, but it has an obvious weakness: it mixes versions, public examples, old APIs, and assumptions learned from unrelated ecosystems.
Framework-specific agent context addresses that problem.
Kora provides an official Kora Skills repository with separate packages for Kora 2.x and Kora 1.x. The skills are designed for AI coding agents and cover common framework tasks such as creating services, adding HTTP endpoints, working with repositories, integrating protocols, and diagnosing DI graph errors.
The important idea is not the installation mechanism.
It is the existence of a curated semantic layer between the general model and the current framework version.
general AI model
+
Kora 2 skill
+
current repository
+
official docs
↓
version-aware framework assistant
This is an increasingly important pattern for technical learning.
An AI model can know Java extremely well while still needing authoritative context about the exact conventions of Kora 2.
The skill provides that context in a format optimized for the agent.
For a learner, this reduces the chance that explanations drift toward patterns from Kora 1, Spring, Micronaut, or another framework that happens to look similar.
The distinction matters because plausible wrong analogies are one of the main risks of AI-assisted learning.
AI Can Explain an Unfamiliar Annotation in Layers¶
Consider a developer encountering an annotation they have never seen before.
The old workflow might be:
The AI-assisted workflow can be layered.
First:
What does this annotation mean at the API level?
The agent provides the concise explanation.
Then:
What does Kora generate for it?
The agent identifies the generated class.
Then:
Show me the relevant generated method only.
The agent extracts the exact wrapper or handler.
Then:
Explain this generated code in plain English.
The agent converts implementation into a conceptual flow.
Then:
Which objects in the application graph does this generated class depend on?
The agent follows constructor dependencies.
Then:
Which configuration controls those objects?
The agent traces configuration.
Then:
How would I test this behavior?
The agent identifies the canonical test style and writes a focused example.
This is not a static tutorial.
It is adaptive depth.
The learner controls how far to descend.
That dramatically changes the experience of approaching unfamiliar framework functionality.
AI Can Write the Example While It Explains the Concept¶
A major weakness of passive learning is the gap between recognition and production.
A developer can read an explanation and feel that it makes sense while still being unable to write the code from scratch.
AI-assisted learning can collapse that gap because the explanation can immediately produce an executable artifact.
For example:
Explain how Kora repositories work, then add a small repository for
User, compile it, and show me what Kora generated.
The agent can:
- explain the repository abstraction;
- inspect the project's database module;
- write the repository interface;
- add or reuse entity mappings;
- compile the module;
- inspect the generated implementation;
- explain the generated JDBC path;
- run a test;
- connect the result back to the conceptual explanation.
The learner gets theory and evidence in the same session.
That creates a much tighter educational loop than reading a tutorial and later attempting to reproduce it from memory.
Generated Repositories Are Particularly Good Teaching Artifacts¶
Persistence layers are often where abstractions become difficult to reason about.
An annotation or repository interface can conceal mapping, SQL preparation, parameter binding, result-set decoding, connection management, transaction participation, and exception handling.
Kora's generated repository model provides an opportunity to expose much of that path.
A learner can start from:
and ask:
What actually runs?
The agent can inspect the generated implementation and identify:
- the JDBC connection source;
- the SQL statement;
- parameter mapping;
- result mapping;
- telemetry;
- transaction-related behavior;
- return-type handling.
That turns a potentially magical abstraction into ordinary code.
The educational benefit is significant because the learner acquires framework knowledge without losing database knowledge.
They see the abstraction and the underlying mechanism together.
Generated HTTP Code Can Teach Request Lifecycles¶
HTTP frameworks are another area where beginners often memorize annotations without understanding the request path.
An AI tutor can use Kora's generated HTTP handlers to show the lifecycle directly:
socket / server runtime
↓
Kora route
↓
generated request handler
↓
request mapper
↓
interceptors
↓
controller method
↓
response mapper
↓
HTTP response
This teaches several concepts simultaneously:
- where framework routing ends;
- where user code begins;
- how parameters are decoded;
- where validation occurs;
- where authentication or other interceptors run;
- what executes on a virtual thread;
- how response conversion works.
The developer is not only learning "how to write a controller."
They are learning how the request actually travels through the service.
That knowledge later improves debugging and architectural review.
Generated AOP Makes Cross-Cutting Behavior Teachable¶
AOP is notoriously difficult to teach because source code and execution order can diverge.
A method may look simple while transactions, validation, retry, metrics, cache, security, or logging wrap the call.
Runtime proxy systems often require a conceptual explanation of interception machinery before the learner can reason about the effective method call.
Kora's compile-time AOP turns that behavior into generated subclasses.
That is ideal for an AI-assisted explanation.
The agent can say:
Your source method remains unchanged. Kora generated this subclass. This overridden method runs validation first, then enters the resilience policy, then calls
super, then handles the result.
The learner can verify the explanation against source.
This is especially valuable when multiple aspects are combined.
Instead of trusting an abstract statement about ordering, the agent can inspect the generated method and describe the actual order for the current application.
That is a better learning model because it is empirical.
The Agent Can Explain Compile Errors as Framework Concepts¶
Compiler errors are often emotionally perceived as friction, especially by beginners.
An AI tutor can reframe them as concrete lessons.
Suppose Kora reports a dependency cycle.
The agent can translate:
into architecture:
Kora is not merely refusing to construct these classes. The graph reveals that your dependency direction is circular. You can solve the compiler error by introducing indirection, but first decide whether the architecture itself is wrong.
That is a much better explanation than simply patching the code.
Suppose two components satisfy the same type.
The agent can explain ambiguity and then show tags or another canonical disambiguation mechanism.
Suppose a validation annotation requires a class to be non-final or a Kotlin method to be open.
The agent can inspect the generated-subclass model and explain why the language restriction exists.
This is important.
The best AI tutor should not merely make errors disappear.
It should connect each error to the framework mechanism that produced it.
Kora's compile-time diagnostics give the agent a strong foundation for doing that.
AI Can Compare Code Against the Canonical Kora Approach¶
One of the major risks in AI coding is code that works but does not belong.
An agent may produce a technically valid implementation borrowed from another framework, older documentation, or generic Java patterns. It may compile while bypassing the intended Kora model.
Framework-specific documentation and skills make a different interaction possible:
This implementation works. Is it how Kora expects this problem to be solved?
That question is more important than it appears.
Learning a framework is partly learning its preferred boundaries.
Where should configuration be mapped?
How should components enter the graph?
How should a repository be declared?
How should an HTTP client be represented?
Where should resilience live?
How should a test replace a component?
How should custom integrations be packaged?
An AI agent with current Kora context can compare the proposed code with documented conventions and existing project usage.
That turns style guidance into an interactive review loop.
Learning Through Contrast Becomes Cheap¶
One of the best ways to understand a framework is to compare it with something already familiar.
Historically, writing high-quality comparisons required an expert who understood both systems.
AI makes personalized contrast much easier.
A developer coming from Spring can ask:
Explain Kora DI using Spring terminology, but tell me where the analogy breaks.
A developer coming from Quarkus can ask:
Which parts of Kora are conceptually similar to build-time augmentation, and which are different?
A developer coming from Ktor can ask:
Show me where Kora uses generated infrastructure instead of explicit DSL wiring.
A Kotlin developer can ask:
Explain why Kora 2 favors synchronous signatures and virtual threads instead of suspend APIs.
The agent can adapt the teaching model to the learner's prior knowledge.
This is educationally significant because expertise grows fastest when new concepts attach to existing mental models.
Kora's use of familiar top-level abstractions—controllers, repositories, modules, clients, configuration objects—makes these comparisons relatively straightforward.
Runnable Examples Become Executable Textbooks¶
Examples have always been useful.
AI changes their role.
A runnable example is no longer only something the developer reads or copies. It is something the agent can inspect, execute, modify, compare with the current project, and use as a known-good reference.
That creates a powerful learning pattern:
question
↓
find official example
↓
run it
↓
modify one concept
↓
compile
↓
inspect generated output
↓
compare with project
The example becomes an executable textbook chapter.
Kora's documentation emphasizes runnable examples across modules and guides. This is particularly useful for an agent because the example gives both semantic and syntactic evidence.
Documentation may say that a certain pattern is supported.
A runnable example proves how the project expects it to be wired.
That is much stronger grounding.
Black-Box Tests Close the Learning Loop¶
Learning a framework is not complete when code compiles.
The learner needs to see behavior.
Kora's fast startup and compile-time graph make full application tests practical enough that black-box testing can play an important role in validation.
For AI-assisted learning, this creates another deterministic feedback layer.
A developer can ask:
Add this controller and prove that it behaves correctly from the HTTP boundary.
The agent can write the endpoint, compile the service, start the application in a test, call the public API, and inspect the response.
The resulting loop is:
concept
↓
implementation
↓
compile-time validation
↓
generated-source inspection
↓
black-box behavior
↓
understanding
This is close to an ideal learning environment because each level tests a different part of the mental model.
AI Can Teach the Framework While Debugging Real Work¶
Traditional learning often happened before productive work.
Read first.
Practice second.
Build later.
AI makes just-in-time framework learning much more viable.
A developer can encounter a real task—say, adding timeout and retry to an outbound HTTP call—and learn the relevant Kora concepts while implementing it.
The agent can explain the resilience annotations, locate configuration, generate the wrapper, inspect aspect ordering, write a failure-path test, and explain how telemetry represents retries.
The learning is embedded in the task.
This can be more effective than generic training because the developer has immediate context and motivation.
The important caveat is that the agent must resist doing everything silently.
If the goal is education, the workflow should expose the mechanism:
Kora's architecture gives the agent enough inspectable artifacts to do that well.
Framework Transparency Matters More When Nobody Reads Everything¶
There is an apparent paradox in the AI era.
Developers may personally read less framework source.
Yet framework source transparency becomes more important.
Why?
Because machines can read on their behalf.
The value of readable internals is no longer limited to the number of humans willing to inspect them manually.
A framework can expose transparent generated classes, straightforward processors, explicit wiring, and thin adapters even if most application developers never open those files themselves.
The agent can use them as evidence.
This changes the economics of transparency.
In the old model:
In the AI model:
readable internals
↓
agent can inspect automatically
↓
value reaches every developer asking a question
This is why inspectable framework behavior becomes more valuable, not less.
Black Boxes Become More Expensive in an Agentic Environment¶
AI is very good at producing answers from explicit evidence.
It is much weaker when important behavior exists only as hidden runtime state.
Consider a framework behavior that depends on:
- dynamic proxy composition;
- classpath scanning;
- reflection;
- runtime ordering;
- post-processors;
- implicit defaults;
- container callbacks;
- environment-dependent registration.
A skilled human may know how to inspect the running container or attach a debugger.
An agent can do some of that too, but the reasoning problem is more difficult because the effective program is not obvious from source.
By contrast, if the framework generates a concrete class, the agent has a static artifact that can be read and explained.
That gives compile-time transparency a new strategic value.
It is not merely about performance.
It is about making the effective program legible.
The New Learning Stack Is Evidence-Driven¶
We can now describe a modern framework-learning stack.
At the bottom are familiar programming-language tools:
Above them are types and compiler constraints:
Above that is framework documentation:
Then executable material:
Then implementation evidence:
And above all of them sits the conversational interface:
The agent does not replace the lower layers.
It makes them easier to query.
That distinction matters.
A weak framework with poor docs and opaque internals does not become easy merely because an LLM is available.
A transparent framework becomes dramatically easier because the LLM can expose its transparency on demand.
Learning Shifts From Memorization to Interrogation¶
The old framework expert often knew many facts from memory.
Which annotation to use.
Which property name controlled a feature.
Which starter activated another module.
Which proxy restriction caused a bug.
Which combination of annotations was unsafe.
Which internal extension point could be overridden.
AI lowers the value of memorizing retrievable facts.
The new skill is asking better questions and evaluating explanations.
A developer can interrogate the system:
- What generated this class?
- Why is this dependency in the graph?
- Which path handles this request?
- Where is this timeout enforced?
- What does this compiler error imply architecturally?
- Which framework abstraction owns this responsibility?
- Is this generated code doing anything I did not expect?
- Which part comes from Kora and which part from the underlying library?
- Does this approach match the current Kora 2 conventions?
This is a more active model of learning.
The developer is not trying to store the framework in memory.
They are learning how to reason about it.
Expertise Still Matters—But It Changes Shape¶
It would be a mistake to conclude that AI makes framework expertise unnecessary.
It changes what expertise looks like.
Knowing the name of an annotation becomes less valuable.
Understanding why the abstraction exists becomes more valuable.
Remembering a configuration property becomes less valuable.
Understanding the operational consequence of that configuration becomes more valuable.
Knowing how to generate a repository becomes less valuable.
Knowing whether the repository boundary is architecturally correct becomes more valuable.
Knowing how to add retry becomes less valuable.
Knowing whether retry will amplify load during a downstream failure becomes more valuable.
This suggests a healthier learning progression:
AI accelerates the first two levels.
Framework transparency helps with the middle.
Human experience remains essential at the top.
Kora Can Teach Mechanism Without Demanding Framework Archaeology¶
This is perhaps Kora's strongest fit with the new model.
The framework exposes enough mechanism to be inspectable without forcing every learner to become a framework contributor.
The developer can remain at the high level most of the time:
When a question arises, the agent can descend:
Then return to the high-level model with an explanation.
That is a good abstraction boundary.
The internals are available but not mandatory.
AI makes this pattern much more useful because the cost of crossing the boundary temporarily becomes very low.
Onboarding a New Developer Can Become a Guided Graph Walk¶
Imagine onboarding a developer into an unfamiliar Kora service.
The traditional process might include:
- architecture documents;
- a framework introduction;
- code walkthroughs;
- pairing sessions;
- internal wiki pages;
- several days of independent exploration.
Those are still valuable.
But an agent can provide an additional interactive walkthrough based on the actual repository.
The developer can ask:
Start at the application entry point and explain the graph.
Then:
Which components handle incoming HTTP requests?
Then:
Pick one endpoint and trace it to the database.
Then:
Which classes in that path are handwritten and which are generated?
Then:
Show me where validation is inserted.
Then:
Which configuration objects affect this path?
Then:
Which tests prove it?
Then:
What would fail at compile time if I removed this component?
This turns onboarding into exploration of the real system.
The framework's compile-time structure makes the walkthrough especially concrete because many relationships are explicit before runtime.
The Agent Can Adapt Depth to the Developer¶
Not every developer needs the same explanation.
A beginner may ask:
What is a Kora module?
An experienced JVM engineer may ask:
Is a module closer to a provider collection, a configuration class, or a compile-time graph fragment?
A framework maintainer may ask:
How does the processor resolve candidate dependencies across submodules?
The AI can answer each at the appropriate depth.
This adaptive depth is one of the biggest changes in technical learning.
Books and docs must choose an audience.
An agent can translate between levels while staying grounded in the same source material.
Kora benefits because its implementation layers are relatively easy to connect conceptually:
The same concept can therefore be explained at multiple resolutions without inventing a completely different story for each audience.
The AI Tutor Can Be Asked to Prove Its Explanation¶
One of the healthiest habits in AI-assisted development is to ask for evidence.
Do not merely ask:
How does this work?
Ask:
How does this work, and show me the generated class or source path that proves it?
This is where transparent frameworks shine.
The agent can anchor explanations in:
- a generated class;
- a type signature;
- a compiler diagnostic;
- a test;
- a documentation section;
- an implementation class.
This turns the AI from an oracle into an interpreter.
That distinction is critical for learning.
An oracle encourages trust.
An interpreter encourages verification.
Kora's generated-source model makes verification relatively cheap.
Canonical Context Reduces Hallucinated Framework Knowledge¶
AI-assisted learning has a serious failure mode: confident analogies.
A model may know that many Java frameworks use annotations, DI, repositories, AOP, configuration objects, and HTTP controllers. If current framework context is weak, it can transfer behavior from one ecosystem to another.
That is dangerous because the result often sounds reasonable.
Kora's official documentation, examples, generated source, and Kora Skills package provide several independent anchors against this failure.
The agent can check:
Does the documentation say this?
↓
Does the current project use it?
↓
What was generated?
↓
Does it compile?
↓
Do tests confirm behavior?
The more of these checks are available, the less the developer has to trust pure model recall.
This is another reason the quality of the framework's machine-readable surface matters more than raw popularity.
The Best Documentation May Be Documentation That Can Be Executed¶
Static prose remains essential, but the most valuable learning material increasingly has executable counterparts.
For a framework like Kora, an ideal concept can be represented across several forms:
prose explanation
↓
small code example
↓
runnable guide project
↓
generated implementation
↓
test
↓
compiler feedback
An AI agent can connect all of them.
If the prose and executable artifacts disagree, that discrepancy can even be detected.
This suggests a future direction for framework documentation generally: treat examples and generated outputs as first-class documentation rather than supplemental material.
Kora is already well positioned for that style because code generation is central to its architecture.
"Read the Generated Code" Stops Being a Threat¶
Framework discussions sometimes use "you can read the generated code" defensively.
The phrase can imply that understanding the system requires work the framework should have done for the developer.
AI changes the emotional and practical meaning of the phrase.
"Read the generated code" can now mean:
Ask the agent to inspect the generated implementation and summarize exactly the part relevant to your question.
That is a very different cost profile.
Suppose the generated proxy is 300 lines.
The developer does not have to read 300 lines.
They can ask:
Where is the timeout applied around
fetchUser, and what happens when it expires?
The agent can isolate twenty relevant lines and explain the flow.
Suppose a generated module contains many handlers.
The developer can ask:
Find the handler for
POST /users, list its dependencies, and explain the request path.
The agent filters the artifact.
This means generated code can serve as a high-fidelity intermediate representation between declarative source and runtime behavior.
That is an advantage when machines can query it selectively.
Framework Learning Becomes More Local and Version-Specific¶
The old web-search model frequently taught developers the framework in aggregate.
Search results mixed:
- old versions;
- new versions;
- blog posts;
- deprecated APIs;
- forum answers;
- vendor examples;
- random GitHub code.
The learner had to infer which information applied.
AI agents operating inside a repository can start from exact dependencies.
That makes learning more local.
this project
+
this Kora version
+
this generated code
+
this compiler output
+
this skill package
=
current learning context
Version-specific Kora skills reinforce this by separating the 1.x and 2.x framework lines.
This is particularly important during major architectural transitions because an agent can avoid teaching patterns that are valid historically but inappropriate for the current codebase.
A Framework Can Now Be Easier to Learn Than Its Community Size Suggests¶
Historically, community size strongly influenced perceived learnability.
A framework with thousands of tutorials felt easy because answers were easy to find.
A framework with excellent architecture but little public content could feel difficult because the learner had fewer fallback resources.
AI weakens that correlation.
Learnability increasingly depends on whether the framework exposes high-quality evidence.
A smaller framework can be surprisingly learnable if it has:
- comprehensive current documentation;
- coherent APIs;
- runnable examples;
- readable generated code;
- deterministic compiler feedback;
- strong typing;
- transparent source;
- stable conventions;
- machine-readable agent guidance.
Kora checks many of these boxes.
This does not erase the advantages of a large ecosystem.
It changes the balance between social knowledge and technical legibility.
Social Knowledge Is No Longer the Only Way to Fill Gaps¶
Before AI, if documentation omitted a detail, developers often depended on people.
Someone had written a blog post.
Someone had answered a question.
Someone on the team had encountered the issue.
Someone in a chat room knew the workaround.
That social layer remains useful, but it is no longer the only path.
An agent can inspect the implementation directly.
This is especially valuable for niche questions that never generated a public discussion.
For example:
What exact mapper does my generated repository use for this nullable column?
There may never be a Stack Overflow answer for that precise combination.
The generated class contains the answer.
The agent can find it.
This is the difference between retrieving collective memory and interrogating the actual system.
Learning Can Follow the Exact Path of Curiosity¶
Traditional curricula are linear.
Real curiosity is not.
A developer may begin with:
How do I create an HTTP endpoint?
Then wonder:
Where does the handler come from?
Then:
Why does this execute on a virtual thread?
Then:
Where is the executor provided?
Then:
Is it a graph component?
Then:
How is the graph generated?
Then:
What happens if there are two candidates?
Then:
How does Kora report ambiguity?
This chain crosses HTTP, concurrency, DI, code generation, and compiler diagnostics.
A static tutorial cannot anticipate every path.
An AI agent can follow it.
Kora's coherent architecture helps because the answers connect rather than fragment into unrelated subsystems.
AI Can Turn Production Incidents Into Learning Sessions¶
Framework learning does not stop after onboarding.
The most durable expertise often comes from debugging difficult failures.
AI can make those moments more educational.
Suppose a resilience policy behaves unexpectedly.
The agent can inspect:
- configuration;
- annotations;
- generated aspect ordering;
- exception classification;
- telemetry;
- tests;
- underlying implementation.
Then it can explain not merely how to fix the incident but why the framework behaved that way.
Suppose a request does not reach a controller.
The agent can inspect the generated route handler, mapping, interceptors, validation, and configuration.
Suppose a repository mapping fails.
The agent can inspect the generated mapper and database types.
Because Kora's effective behavior is frequently visible in generated source, the postmortem can be tied to concrete artifacts.
That builds genuine expertise.
AI Does Not Remove the Need to Learn¶
There is an important failure mode in all of this.
A developer can delegate so much to the agent that no learning occurs.
The agent writes the controller.
The agent fixes compilation.
The agent updates tests.
The agent commits the change.
The developer approves the diff without understanding the mechanism.
That is not AI-assisted learning.
That is outsourcing.
The distinction depends on workflow.
A learning-oriented interaction asks the agent to expose reasoning through evidence:
- explain before changing;
- show the generated artifact;
- identify the invariant behind the compiler error;
- compare alternatives;
- state which part is framework behavior and which part is application choice;
- show how the test proves the behavior.
Kora makes this workflow possible, but the developer still has to choose it.
The framework can be transparent.
The agent can be explanatory.
The human still needs to care about understanding.
The Goal Is Not to Know Everything—It Is to Be Able to Reconstruct Anything Important¶
This may be the best description of expertise in the AI era.
Developers no longer need to memorize every framework detail.
They need a strong enough conceptual model to know what to ask, where to verify, and how to judge the result.
A Kora developer should understand:
- the application graph;
- compile-time generation;
- the role of modules and components;
- how generated AOP works;
- how HTTP, data, messaging, and configuration enter the graph;
- what the compiler can validate;
- where generated source lives;
- how tests relate to production wiring.
With that foundation, many details can be reconstructed on demand.
The AI agent becomes a high-speed navigation system.
The framework's transparency ensures that there is somewhere meaningful to navigate.
The New Beginner Experience Can Be Better Than the Old Expert Experience¶
There is a striking consequence of this model.
A beginner with a capable agent may be able to answer certain mechanism questions faster than an experienced developer could ten years ago.
Not because the beginner knows more.
Because they can query more evidence.
They can ask the agent to inspect code paths that previously required manual framework archaeology.
They can compare documentation with generated source immediately.
They can run tests while learning.
They can receive explanations tailored to their background.
This does not make the beginner an expert.
It does raise the floor dramatically.
That is good for framework adoption.
A technology no longer has to hide complexity to feel approachable. It can expose complexity in inspectable form and rely on tools to reveal only the relevant slice.
Kora fits that philosophy well.
What a Modern "Learn Kora" Session Could Look Like¶
A modern framework tutorial does not have to begin with an hour of reading.
It could be interactive.
The developer opens a small Kora application and asks:
Explain this project from the top.
The agent identifies the application entry point and graph.
Then:
Show me the HTTP boundary.
The agent identifies controllers and generated handlers.
Then:
Pick one request and trace it.
The agent follows the handler to service and repository.
Then:
Which parts were generated?
The agent opens the relevant generated sources.
Then:
Why did Kora generate them?
The agent connects each generated class to an annotation or interface.
Then:
Break one dependency deliberately.
Compilation fails.
Then:
Explain this error.
The agent maps the diagnostic back to the graph.
Then:
Fix it canonically.
The agent applies the change.
Then:
Add a validation rule.
The agent does so, compiles, opens the generated AOP proxy, and shows where validation occurs.
Then:
Add a retry and show me its order relative to validation.
The generated wrapper becomes the teaching artifact.
Then:
Write a test that proves the behavior from the HTTP boundary.
The agent closes the loop.
A session like this teaches far more than syntax.
It teaches the framework's execution model.
Kora's New Learning Model Can Be Summarized as a Feedback System¶
The old learning system was mostly information retrieval:
The new one is a feedback system:
Each stage improves the next.
Documentation provides concepts.
Source provides implementation.
Generated classes provide the effective framework decisions.
The compiler provides structural truth.
Tests provide behavioral truth.
The AI connects these layers.
The developer forms the mental model.
That is a much stronger learning architecture.
Why Kora Fits the AI Era Without Needing AI in the Runtime¶
There is a temptation to call any software "AI-native" once it adds an AI feature.
That is not the interesting sense in which Kora fits the AI era.
Kora does not need an LLM in the request path.
It does not need AI-specific annotations.
It does not need to turn framework behavior into natural-language prompts.
Its fit comes from conventional engineering qualities that become more valuable when AI agents are available:
comprehensive docs
+ coherent APIs
+ strong typing
+ compile-time validation
+ readable generated sources
+ thin abstractions
+ runnable examples
+ transparent source
+ deterministic feedback
+ official agent skills
↓
high-quality context for humans and machines
This is a much more durable advantage than adding an AI-branded runtime module.
The framework is useful to agents because it is legible.
Inspectability Is a New Form of Developer Experience¶
Developer experience has traditionally focused on syntax, setup, hot reload, documentation, IDE completion, and error messages.
AI adds another dimension:
How easily can a machine reconstruct the framework's actual behavior from the artifacts available in the project?
That question deserves to become a first-class DX criterion.
A framework with beautiful syntax but opaque runtime behavior may feel easy at first and become difficult when the agent needs to explain an edge case.
A framework with explicit generated mechanics may look slightly more technical but become easier to interrogate.
Kora's architecture suggests a useful principle:
The two are not opposites.
The best abstraction is not one whose implementation is impossible to see.
It is one whose implementation you do not need to see until you want to—and can understand when you do.
Framework Authors Should Design for Machine Explanation¶
The implications go beyond Kora.
Framework authors can now ask new design questions.
Can an agent trace a user declaration to the runtime mechanism?
Are generated artifacts readable?
Are compiler diagnostics specific?
Are examples executable?
Are conventions explicit?
Is documentation versioned clearly?
Can source relationships be followed statically?
Are hidden defaults minimized?
Does one feature reuse concepts learned elsewhere?
Can framework-specific knowledge be packaged as agent context?
Can the agent distinguish canonical usage from merely possible usage?
These questions are not about optimizing for machines at the expense of humans.
Most of them also improve human maintainability.
AI simply exposes their value more strongly.
The Framework Should Teach Through Its Architecture¶
The most powerful learning systems do not require a separate explanation for every behavior.
Their architecture teaches recurring rules.
Kora's strongest recurring rules are relatively simple:
- application structure is a graph;
- graph construction is checked at compile time;
- declarative features produce generated code;
- generated code is ordinary Java or Kotlin;
- cross-cutting behavior uses generated AOP rather than runtime dynamic proxies;
- integrations stay close to underlying technologies;
- framework mistakes should fail as early and explicitly as possible;
- modules should compose through the same application model.
Once the learner understands those rules, many new features become predictable.
That is the hallmark of a learnable framework.
The learner does not merely collect facts.
They develop expectations that are usually correct.
AI can accelerate this process by repeatedly pointing back to the same principles.
From Tribal Knowledge to Queryable Evidence¶
The deepest transformation can be summarized as a shift in where framework knowledge lives.
The old model relied heavily on distributed human memory:
documentation
+
blog posts
+
Stack Overflow
+
conference talks
+
senior developers
+
trial and error
↓
framework understanding
The new model can draw more heavily from queryable technical evidence:
documentation
+
types
+
generated code
+
compiler diagnostics
+
tests
+
source code
+
agent skills
↓
AI-assisted explanation
↓
framework understanding
Human experience still matters.
But less knowledge has to remain informal.
That is a significant improvement.
Conclusion¶
Learning a framework used to mean building a personal archive of answers.
You read tutorials. You searched forums. You copied examples. You memorized annotations. You encountered surprising runtime behavior. You learned which parts of the abstraction were trustworthy and which required experience. Over time, enough exceptions accumulated to become expertise.
AI changes that process.
A coding agent can now operate inside the learning loop. It can read current documentation, inspect the exact project, follow types, open generated classes, search framework source, write examples, run compilation, interpret errors, execute tests, and explain the result in the developer's own context.
This does not make framework design irrelevant.
It makes framework design more important.
An agent can only explain what it can observe. It performs best when the framework exposes coherent concepts, explicit contracts, deterministic diagnostics, readable generated code, executable examples, and source that maps cleanly to the public programming model.
Kora fits this new model unusually well.
Its documentation covers most of the public framework surface. Its application graph is created and checked at compile time. Its generated HTTP handlers, repositories, mappings, and AOP wrappers can be inspected directly. Strong typing narrows invalid interpretations. Thin abstractions preserve familiar JVM and infrastructure knowledge. The same core concepts repeat across modules. Runnable examples provide executable reference points. The official Kora Skill supplies version-specific context to coding agents.
The result is a framework that can be learned interactively.
A developer can ask what an annotation means, then inspect what it generated.
They can ask why compilation failed, then connect the diagnostic to the application graph.
They can ask how a request travels through the system, then trace the generated handler.
They can ask whether an implementation follows canonical Kora conventions, then compare it with official examples and skills.
They can ask the agent to read generated code they would never willingly study line by line and receive a focused explanation of only the relevant mechanism.
That last point is especially important.
"Sometimes you need to inspect generated source" used to sound like additional framework complexity.
In an AI-assisted environment, it can become an advantage.
The developer does not need to inspect everything personally.
The framework simply needs to make its behavior inspectable.
The machine can do the reading.
The human can do the understanding.
And that may be the new standard for framework learnability:
Do not merely make the framework easy to use when everything works. Make it easy for humans and machines to discover why it works.
Kora's compile-time, typed, generated, and transparent architecture happens to align very closely with that standard.
In the AI era, the easiest framework to learn may no longer be the one with the most tutorials.
It may be the one that gives the learner—and the agent beside them—the clearest path from declaration to evidence.