<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Miro Ma</title>
    <description>The latest articles on DEV Community by Miro Ma (@ma_dev).</description>
    <link>https://dev.to/ma_dev</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3975681%2F4c8d5f89-3154-4039-a26b-685bd5081e80.jpg</url>
      <title>DEV Community: Miro Ma</title>
      <link>https://dev.to/ma_dev</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/ma_dev"/>
    <language>en</language>
    <item>
      <title>Why the Same AI Model Can Feel Completely Different Across Coding Agents</title>
      <dc:creator>Miro Ma</dc:creator>
      <pubDate>Tue, 08 Sep 2026 10:35:14 +0000</pubDate>
      <link>https://dev.to/ma_dev/why-the-same-ai-model-can-feel-completely-different-across-coding-agents-3p5n</link>
      <guid>https://dev.to/ma_dev/why-the-same-ai-model-can-feel-completely-different-across-coding-agents-3p5n</guid>
      <description>&lt;p&gt;A while ago, I tried building my own coding agent.&lt;/p&gt;

&lt;p&gt;My goal was not to compete with Claude Code or other mature coding agents. I simply wanted to reach what I personally considered a level where the agent was reliable enough to handle real development tasks.&lt;/p&gt;

&lt;p&gt;After a lot of work, it eventually reached the point where it could complete many ordinary tasks.&lt;/p&gt;

&lt;p&gt;Then I started running benchmarks.&lt;/p&gt;

&lt;p&gt;That was when I realized that getting an agent to &lt;em&gt;work&lt;/em&gt; and getting an agent to work &lt;em&gt;reliably&lt;/em&gt; are two very different problems.&lt;/p&gt;

&lt;p&gt;The deeper I went, the more convinced I became of one idea:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;The model determines the capability ceiling of an agent, but the runtime determines how much of that capability is actually realized.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Eventually, I started thinking about agents in another way:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;An agent is a bounded optimization process.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Here is how I arrived at that conclusion.&lt;/p&gt;




&lt;h2&gt;
  
  
  1. From a Phrase-Driven Loop to a Task-Driven Runtime
&lt;/h2&gt;

&lt;p&gt;My first implementation was relatively simple.&lt;/p&gt;

&lt;p&gt;Conceptually, the loop looked something like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Model says what it wants to do
        ↓
Runtime executes it
        ↓
Model sees the result
        ↓
Runtime follows the next instruction
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;I think of this as a &lt;strong&gt;phrase-driven&lt;/strong&gt; agent.&lt;/p&gt;

&lt;p&gt;The runtime is largely following what the model says from one turn to the next.&lt;/p&gt;

&lt;p&gt;This can work surprisingly well for simple tasks.&lt;/p&gt;

&lt;p&gt;But anyone who has used LLMs extensively has probably seen the failure modes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;the model drifts away from the original task,&lt;/li&gt;
&lt;li&gt;repeats something it has already done,&lt;/li&gt;
&lt;li&gt;forgets earlier state,&lt;/li&gt;
&lt;li&gt;believes an operation succeeded when it did not,&lt;/li&gt;
&lt;li&gt;or declares completion too early.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I later changed the architecture toward something more &lt;strong&gt;task-driven&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;What is the current task state?
        ↓
What is still missing?
        ↓
Execute the next step
        ↓
Verify the result
        ↓
Update task state
        ↓
Continue
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The important difference is that the runtime no longer advances purely because the model produced another instruction.&lt;/p&gt;

&lt;p&gt;It advances according to the &lt;strong&gt;state of the task&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;That change noticeably improved stability.&lt;/p&gt;

&lt;p&gt;But it also made me realize how much engineering sits between an LLM and a reliable coding agent.&lt;/p&gt;

&lt;p&gt;Eventually, I stopped trying to build the whole thing myself.&lt;/p&gt;

&lt;p&gt;Not because the model was incapable of writing code, but because the runtime itself had become a serious systems-engineering problem.&lt;/p&gt;




&lt;h2&gt;
  
  
  2. What Building With AI Taught Me About Software Engineering
&lt;/h2&gt;

&lt;p&gt;Modern coding models make it possible for an individual developer to build things that would previously have required far more time or a larger team.&lt;/p&gt;

&lt;p&gt;If your objective is:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“Get something running first.”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;AI is extremely effective.&lt;/p&gt;

&lt;p&gt;A website, a prototype, a demo application, or an early version of a product can often be built much faster than before.&lt;/p&gt;

&lt;p&gt;But the situation changes when the goal becomes:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Stable, production-ready, and maintainable for years.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The larger the codebase becomes, the more important architecture, constraints, review and verification become.&lt;/p&gt;

&lt;p&gt;AI continues to help, but raw code generation stops being the main bottleneck.&lt;/p&gt;

&lt;p&gt;I repeatedly ran into three problems.&lt;/p&gt;

&lt;h3&gt;
  
  
  2.1 AI Can Generate Technical Debt Extremely Quickly
&lt;/h3&gt;

&lt;p&gt;AI is very good at solving the immediate problem in front of it.&lt;/p&gt;

&lt;p&gt;A bug appears here:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Add another condition.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A state mismatch appears somewhere else:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Add a fallback.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Another integration breaks:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Add a compatibility path.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Each individual change can look reasonable.&lt;/p&gt;

&lt;p&gt;But after dozens of iterations, the accumulated result can look very different:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;duplicated logic,&lt;/li&gt;
&lt;li&gt;temporary state that became permanent,&lt;/li&gt;
&lt;li&gt;overlapping compatibility layers,&lt;/li&gt;
&lt;li&gt;excessive fallbacks,&lt;/li&gt;
&lt;li&gt;abstractions wrapping other abstractions,&lt;/li&gt;
&lt;li&gt;and code whose original design intent is increasingly difficult to recover.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This happens partly because understanding a large repository is still a retrieval problem.&lt;/p&gt;

&lt;p&gt;An agent normally sees only a subset of the codebase at any particular moment. It searches, reads files, follows symbols, retrieves additional context and progressively constructs a picture of the system.&lt;/p&gt;

&lt;p&gt;That picture is necessarily incomplete.&lt;/p&gt;

&lt;p&gt;Without deliberate refactoring and architectural control, local fixes accumulate.&lt;/p&gt;

&lt;p&gt;One of the strongest lessons I took away from this was:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;AI dramatically increases the speed of code generation, but if architecture, review and refactoring do not keep pace, it can generate technical debt at roughly the same speed.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  2.2 Your Ability to Evaluate the Result Still Matters
&lt;/h3&gt;

&lt;p&gt;This became increasingly obvious as my project became more complex.&lt;/p&gt;

&lt;p&gt;Suppose the problem requires knowledge beyond your own current ability.&lt;/p&gt;

&lt;p&gt;The AI produces a solution.&lt;/p&gt;

&lt;p&gt;Now you still have to answer:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Is the architecture actually reasonable?&lt;/li&gt;
&lt;li&gt;Did it really fix the bug?&lt;/li&gt;
&lt;li&gt;Did it merely work around the bug?&lt;/li&gt;
&lt;li&gt;Is the test meaningful?&lt;/li&gt;
&lt;li&gt;Is the system now more fragile?&lt;/li&gt;
&lt;li&gt;Is there a better abstraction?&lt;/li&gt;
&lt;li&gt;What should be done next?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you cannot evaluate those questions, development becomes increasingly difficult.&lt;/p&gt;

&lt;p&gt;A common response is:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“Just use a stronger coding model.”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I spent thousands of RMB experimenting with different frontier models.&lt;/p&gt;

&lt;p&gt;There were absolutely differences between them.&lt;/p&gt;

&lt;p&gt;Some planned better. Some followed instructions more reliably. Some handled large refactors better. Some were more consistent with tools.&lt;/p&gt;

&lt;p&gt;But none of them eliminated the fundamental problem:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;The complexity of the project you can safely build is still influenced by your ability to understand and evaluate what is being built.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;A stronger model expands that boundary.&lt;/p&gt;

&lt;p&gt;It does not make evaluation unnecessary.&lt;/p&gt;

&lt;h3&gt;
  
  
  2.3 Complex Software Depends More on Constraints Than Cleverness
&lt;/h3&gt;

&lt;p&gt;Large systems usually do not remain reliable because one function is exceptionally intelligent.&lt;/p&gt;

&lt;p&gt;They remain reliable because they have structure:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;clear module boundaries,&lt;/li&gt;
&lt;li&gt;stable interfaces,&lt;/li&gt;
&lt;li&gt;explicit state transitions,&lt;/li&gt;
&lt;li&gt;controlled dependencies,&lt;/li&gt;
&lt;li&gt;type constraints,&lt;/li&gt;
&lt;li&gt;tests,&lt;/li&gt;
&lt;li&gt;invariants,&lt;/li&gt;
&lt;li&gt;and layers that compose in relatively predictable ways.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If the entire architecture is continuously delegated to AI without strong constraints, something interesting happens.&lt;/p&gt;

&lt;p&gt;In one context, the model may conclude that architecture A is best.&lt;/p&gt;

&lt;p&gt;Later, with a slightly different context, architecture B appears more attractive.&lt;/p&gt;

&lt;p&gt;Several iterations later, architecture C gets introduced to solve problems created by the previous two.&lt;/p&gt;

&lt;p&gt;Add incomplete context, model variation and occasional hallucination, and architectural drift becomes easy.&lt;/p&gt;

&lt;p&gt;This is why I increasingly think the important question is not:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“How much code can the model generate?”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;but:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;“How tightly can we constrain the system so that generated changes remain coherent?”&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  3. Why the Same Model Behaves So Differently Across Agents
&lt;/h2&gt;

&lt;p&gt;This was the question that became much more interesting to me after building an agent myself.&lt;/p&gt;

&lt;p&gt;People often assume that if two products use the same underlying model, their coding ability should be roughly equivalent.&lt;/p&gt;

&lt;p&gt;For example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Same Claude model
or
Same GPT model
or
Same Gemini model
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;So perhaps the only meaningful differences are the UI and a few extra tools.&lt;/p&gt;

&lt;p&gt;In practice, that is nowhere near the whole story.&lt;/p&gt;

&lt;p&gt;While testing my own Rust-based agent runtime, I encountered problems in almost every part of the execution pipeline.&lt;/p&gt;

&lt;h3&gt;
  
  
  3.1 Tool Calling
&lt;/h3&gt;

&lt;p&gt;Tool calling sounds straightforward until you build it.&lt;/p&gt;

&lt;p&gt;You have to deal with things such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;argument parsing failures,&lt;/li&gt;
&lt;li&gt;schema differences,&lt;/li&gt;
&lt;li&gt;provider-specific behavior,&lt;/li&gt;
&lt;li&gt;inconsistent tool outputs,&lt;/li&gt;
&lt;li&gt;malformed responses,&lt;/li&gt;
&lt;li&gt;partial execution,&lt;/li&gt;
&lt;li&gt;retries,&lt;/li&gt;
&lt;li&gt;and determining whether a tool actually succeeded.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If the runtime records a failed operation as successful, the model starts reasoning from a false state.&lt;/p&gt;

&lt;p&gt;Everything after that can be wrong.&lt;/p&gt;

&lt;h3&gt;
  
  
  3.2 Task State
&lt;/h3&gt;

&lt;p&gt;A coding agent may contain conceptual stages such as:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Planning
    ↓
Execution
    ↓
Verification
    ↓
Completion
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If one transition is incorrect, the agent can stop even though obvious work remains.&lt;/p&gt;

&lt;p&gt;Or it can continue executing after the task is already complete.&lt;/p&gt;

&lt;p&gt;The model itself may be perfectly capable of performing the next step.&lt;/p&gt;

&lt;p&gt;The runtime simply never gives it the opportunity.&lt;/p&gt;

&lt;h3&gt;
  
  
  3.3 Repeated Execution and Infinite Loops
&lt;/h3&gt;

&lt;p&gt;If previous actions are not represented correctly in state, an agent may:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;read the same file repeatedly,&lt;/li&gt;
&lt;li&gt;apply the same modification repeatedly,&lt;/li&gt;
&lt;li&gt;rediscover the same plan,&lt;/li&gt;
&lt;li&gt;retry an impossible action,&lt;/li&gt;
&lt;li&gt;or cycle between two states.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Loop detection sounds like a small runtime detail.&lt;/p&gt;

&lt;p&gt;During long tasks, it becomes essential.&lt;/p&gt;

&lt;h3&gt;
  
  
  3.4 Completion Detection
&lt;/h3&gt;

&lt;p&gt;When exactly is an agent finished?&lt;/p&gt;

&lt;p&gt;If the completion condition is too permissive:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Model: Looks good. Done.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;the task may stop before the code is actually working.&lt;/p&gt;

&lt;p&gt;If it is too strict, the opposite happens.&lt;/p&gt;

&lt;p&gt;The build passes, tests pass and the requested change is complete, but the runtime continues looking for more work.&lt;/p&gt;

&lt;p&gt;Reliable stopping conditions are surprisingly difficult.&lt;/p&gt;

&lt;h3&gt;
  
  
  3.5 Context Pollution
&lt;/h3&gt;

&lt;p&gt;Long-running coding tasks generate enormous amounts of information:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;terminal output,&lt;/li&gt;
&lt;li&gt;compiler errors,&lt;/li&gt;
&lt;li&gt;logs,&lt;/li&gt;
&lt;li&gt;tool results,&lt;/li&gt;
&lt;li&gt;plans,&lt;/li&gt;
&lt;li&gt;failed attempts,&lt;/li&gt;
&lt;li&gt;code,&lt;/li&gt;
&lt;li&gt;diffs,&lt;/li&gt;
&lt;li&gt;previous messages.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Keeping everything is not a solution.&lt;/p&gt;

&lt;p&gt;Even very large context windows are finite, and more context does not automatically mean better context.&lt;/p&gt;

&lt;p&gt;Eventually, irrelevant information starts competing with important information.&lt;/p&gt;

&lt;h3&gt;
  
  
  3.6 Error Recovery
&lt;/h3&gt;

&lt;p&gt;Suppose:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;the model stream disconnects,&lt;/li&gt;
&lt;li&gt;a provider returns an error,&lt;/li&gt;
&lt;li&gt;a tool fails,&lt;/li&gt;
&lt;li&gt;a file write partially succeeds,&lt;/li&gt;
&lt;li&gt;or the environment changes unexpectedly.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;What should happen?&lt;/p&gt;

&lt;p&gt;Should the agent:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;retry?&lt;/li&gt;
&lt;li&gt;continue from the existing task state?&lt;/li&gt;
&lt;li&gt;roll back?&lt;/li&gt;
&lt;li&gt;re-plan?&lt;/li&gt;
&lt;li&gt;retrieve the environment again?&lt;/li&gt;
&lt;li&gt;restart the entire task?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Each strategy has trade-offs.&lt;/p&gt;

&lt;p&gt;And every recovery strategy changes the information available to the next model call.&lt;/p&gt;

&lt;h3&gt;
  
  
  3.7 Retrieval Changes Intelligence
&lt;/h3&gt;

&lt;p&gt;Consider two coding agents using exactly the same model.&lt;/p&gt;

&lt;p&gt;Agent A can:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;read precise file ranges,&lt;/li&gt;
&lt;li&gt;search symbols,&lt;/li&gt;
&lt;li&gt;inspect references,&lt;/li&gt;
&lt;li&gt;retrieve repository structure,&lt;/li&gt;
&lt;li&gt;make targeted edits,&lt;/li&gt;
&lt;li&gt;inspect diffs.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Agent B has only a few coarse tools and sometimes returns inconsistent results.&lt;/p&gt;

&lt;p&gt;On paper, both agents have the same “brain.”&lt;/p&gt;

&lt;p&gt;In practice, they are reasoning about different worlds.&lt;/p&gt;

&lt;p&gt;The difference becomes even clearer with code retrieval.&lt;/p&gt;

&lt;p&gt;One agent may effectively rely on:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;grep&lt;/span&gt; &lt;span class="nt"&gt;-R&lt;/span&gt; &lt;span class="s2"&gt;"something"&lt;/span&gt; &lt;span class="nb"&gt;.&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Another might combine:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;repository maps,&lt;/li&gt;
&lt;li&gt;symbol indexes,&lt;/li&gt;
&lt;li&gt;reference graphs,&lt;/li&gt;
&lt;li&gt;LSP information,&lt;/li&gt;
&lt;li&gt;semantic retrieval,&lt;/li&gt;
&lt;li&gt;dependency relationships.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The second agent can often place the same code inside a much more accurate structural context.&lt;/p&gt;

&lt;p&gt;The underlying model has not changed.&lt;/p&gt;

&lt;p&gt;The evidence provided to it has.&lt;/p&gt;

&lt;p&gt;And that changes its reasoning.&lt;/p&gt;

&lt;h3&gt;
  
  
  3.8 Small Differences Compound Over Long Tasks
&lt;/h3&gt;

&lt;p&gt;This is probably one of the most important observations I made.&lt;/p&gt;

&lt;p&gt;Imagine two agents starting from the same model and the same task.&lt;/p&gt;

&lt;p&gt;Agent A retrieves slightly better information during step one.&lt;/p&gt;

&lt;p&gt;That means its decision during step two is slightly better.&lt;/p&gt;

&lt;p&gt;That changes which file it reads during step three.&lt;/p&gt;

&lt;p&gt;That changes what it edits during step four.&lt;/p&gt;

&lt;p&gt;That produces a different compiler result during step five.&lt;/p&gt;

&lt;p&gt;Now the two agents are operating from different states.&lt;/p&gt;

&lt;p&gt;Run this loop for dozens of iterations and the trajectories can diverge dramatically.&lt;/p&gt;

&lt;p&gt;So the phenomenon:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“This model feels amazing inside Agent A but strangely stupid inside Agent B.”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;is not surprising at all.&lt;/p&gt;

&lt;p&gt;The model may be identical.&lt;/p&gt;

&lt;p&gt;The execution trajectory is not.&lt;/p&gt;

&lt;h3&gt;
  
  
  3.9 Context Engineering
&lt;/h3&gt;

&lt;p&gt;After experimenting with this problem, context engineering became one of the areas I consider most important in agent design.&lt;/p&gt;

&lt;p&gt;A long-running agent must simultaneously make the model remember important things and prevent the context from becoming polluted.&lt;/p&gt;

&lt;p&gt;That requires constant decisions:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;What should remain permanently?&lt;/p&gt;

&lt;p&gt;Which history is no longer relevant?&lt;/p&gt;

&lt;p&gt;What can be compressed into one sentence?&lt;/p&gt;

&lt;p&gt;Should failed reasoning remain in context?&lt;/p&gt;

&lt;p&gt;Should a tool result be stored verbatim or summarized?&lt;/p&gt;

&lt;p&gt;Which pieces of code should stay available?&lt;/p&gt;

&lt;p&gt;Which ones should be retrieved again when necessary?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Every decision changes future model behavior.&lt;/p&gt;

&lt;p&gt;Again, small differences accumulate.&lt;/p&gt;

&lt;p&gt;Over a task containing dozens or hundreds of interactions, context policy can significantly change the final result.&lt;/p&gt;

&lt;h3&gt;
  
  
  3.10 Verification Changes Everything
&lt;/h3&gt;

&lt;p&gt;There is a huge difference between an agent that stops after:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“I believe the issue is fixed.”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;and one whose loop looks more like:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Modify
   ↓
Inspect diff
   ↓
Build
   ↓
Run tests
   ↓
Inspect failures
   ↓
Fix again
   ↓
Verify
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The second agent may appear significantly more intelligent.&lt;/p&gt;

&lt;p&gt;But part of that apparent intelligence comes from the runtime forcing the model to collect evidence.&lt;/p&gt;

&lt;p&gt;This applies to many other runtime components as well:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;search budgets,&lt;/li&gt;
&lt;li&gt;task-state management,&lt;/li&gt;
&lt;li&gt;tool design,&lt;/li&gt;
&lt;li&gt;loop detection,&lt;/li&gt;
&lt;li&gt;permission systems,&lt;/li&gt;
&lt;li&gt;recovery policies,&lt;/li&gt;
&lt;li&gt;model-specific prompts,&lt;/li&gt;
&lt;li&gt;verification requirements.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The visible “intelligence” of an agent is an emergent result of the whole system.&lt;/p&gt;




&lt;h2&gt;
  
  
  4. An Agent Is a Bounded Optimization Process
&lt;/h2&gt;

&lt;p&gt;This eventually led me to a mental model that I now find useful.&lt;/p&gt;

&lt;p&gt;At every step, an agent is effectively trying to choose a better next action based on the state it currently understands.&lt;/p&gt;

&lt;p&gt;It might decide to:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;search the repository
read another file
inspect a symbol
call a tool
modify some code
run the compiler
execute tests
collect more evidence
stop
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;But the agent never has perfect knowledge of the environment.&lt;/p&gt;

&lt;p&gt;Its repository view is incomplete.&lt;/p&gt;

&lt;p&gt;Tool results may contain noise.&lt;/p&gt;

&lt;p&gt;Context is limited.&lt;/p&gt;

&lt;p&gt;Search costs time and tokens.&lt;/p&gt;

&lt;p&gt;Execution has side effects.&lt;/p&gt;

&lt;p&gt;And the current state may itself contain incorrect assumptions.&lt;/p&gt;

&lt;p&gt;So the agent is not solving a fully observable global optimization problem.&lt;/p&gt;

&lt;p&gt;It is repeatedly making &lt;strong&gt;local decisions with incomplete information under constraints&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;That is what I mean by:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Agent = bounded optimization.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Once you look at agents this way, many runtime features start to look different.&lt;/p&gt;

&lt;p&gt;A &lt;strong&gt;search budget&lt;/strong&gt; is not merely an implementation detail.&lt;/p&gt;

&lt;p&gt;It defines how much evidence the optimizer is allowed to gather.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Loop detection&lt;/strong&gt; prevents the optimization process from getting trapped in cycles.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Verification&lt;/strong&gt; changes the effective objective from:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;produce a plausible answer
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;to something closer to:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;produce an answer that survives external evidence
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Context management&lt;/strong&gt; determines which approximation of the current state the optimizer gets to see.&lt;/p&gt;

&lt;p&gt;And &lt;strong&gt;stopping conditions&lt;/strong&gt; define when the optimization process is considered sufficiently converged.&lt;/p&gt;

&lt;p&gt;Seen from this perspective, much of agent engineering is really about defining the boundaries of that optimization process.&lt;/p&gt;




&lt;h2&gt;
  
  
  5. Stronger Reasoning Does Not Automatically Mean Better Convergence
&lt;/h2&gt;

&lt;p&gt;There is another interesting consequence.&lt;/p&gt;

&lt;p&gt;A more capable reasoning model does not automatically produce a more reliable agent.&lt;/p&gt;

&lt;p&gt;Without appropriate constraints, a stronger model may:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;search more,&lt;/li&gt;
&lt;li&gt;explore more branches,&lt;/li&gt;
&lt;li&gt;call more tools,&lt;/li&gt;
&lt;li&gt;generate more hypotheses,&lt;/li&gt;
&lt;li&gt;and continue reasoning for longer.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That can be extremely useful.&lt;/p&gt;

&lt;p&gt;But without search budgets, stage boundaries, loop detection and stopping conditions, it can also make convergence harder.&lt;/p&gt;

&lt;p&gt;In other words:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Better exploration is useful only if the system can eventually turn exploration into convergence.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This is why agent engineering cannot be reduced to simply inserting a stronger model into an existing loop.&lt;/p&gt;

&lt;p&gt;A stronger model gives the agent a larger and potentially better search space.&lt;/p&gt;

&lt;p&gt;The runtime still has to guide that search toward a useful result.&lt;/p&gt;




&lt;h2&gt;
  
  
  6. The Agent Is the Whole System
&lt;/h2&gt;

&lt;p&gt;After building one myself, I no longer think of a coding agent as simply:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“An LLM with tools.”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The actual product is closer to:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Model
+ Context Engineering
+ Retrieval
+ Tools
+ Task State
+ Execution Loop
+ Verification
+ Error Recovery
+ Permissions
+ Model Adaptation
+ Stopping Conditions
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;All of these components shape the model's future observations and actions.&lt;/p&gt;

&lt;p&gt;Together, they determine whether the system eventually reaches a useful result.&lt;/p&gt;

&lt;p&gt;So my current summary is:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;The model determines the capability ceiling. The runtime determines how much of that capability can be realized reliably.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Or, from the optimization perspective:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;The model provides the intelligence to search the solution space. Agent engineering defines the boundaries that make that search converge.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That is why the exact same model can feel dramatically different depending on the agent around it.&lt;/p&gt;

&lt;p&gt;The brain matters.&lt;/p&gt;

&lt;p&gt;But so does the rest of the system.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>programming</category>
      <category>agents</category>
      <category>softwareengineering</category>
    </item>
    <item>
      <title>How to Use Android as a Remote IDE with Tailscale + NimoteCode: Free SSH Access to Mac &amp; Linux Over the Public Internet</title>
      <dc:creator>Miro Ma</dc:creator>
      <pubDate>Fri, 04 Sep 2026 08:39:35 +0000</pubDate>
      <link>https://dev.to/ma_dev/how-to-use-android-as-a-remote-ide-with-tailscale-and-nimotecode-free-ssh-access-to-mac-and-linux-47el</link>
      <guid>https://dev.to/ma_dev/how-to-use-android-as-a-remote-ide-with-tailscale-and-nimotecode-free-ssh-access-to-mac-and-linux-47el</guid>
      <description>&lt;p&gt;This short guide shows how to connect NimoteCode on Android to a Mac or Linux machine through Tailscale and SSH. You do not need a public IP address or router port forwarding.&lt;/p&gt;

&lt;h2&gt;
  
  
  macOS: install Tailscale from the command line
&lt;/h2&gt;

&lt;p&gt;First, check whether Homebrew is installed:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;brew &lt;span class="nt"&gt;--version&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If Homebrew is not installed, install it first:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;/bin/bash &lt;span class="nt"&gt;-c&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;curl &lt;span class="nt"&gt;-fsSL&lt;/span&gt; https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh&lt;span class="si"&gt;)&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Install Tailscale:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;brew &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;--cask&lt;/span&gt; tailscale
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Launch Tailscale:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;open &lt;span class="nt"&gt;-a&lt;/span&gt; Tailscale
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The first launch opens a sign-in page. Sign in with your Tailscale account, then find this Mac's Tailscale IPv4 address:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;tailscale ip &lt;span class="nt"&gt;-4&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You will usually see an address similar to:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;100.80.12.34
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Confirm the connection status:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;tailscale status
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  macOS: enable SSH
&lt;/h2&gt;

&lt;p&gt;Enable Remote Login:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;systemsetup &lt;span class="nt"&gt;-setremotelogin&lt;/span&gt; on
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Confirm that it is enabled:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;systemsetup &lt;span class="nt"&gt;-getremotelogin&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The output should be:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Remote Login: On
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You can also test SSH locally. Replace &lt;code&gt;your_username&lt;/code&gt; with your macOS username:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ssh your_username@localhost
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Linux: command line only
&lt;/h2&gt;

&lt;p&gt;Linux does not need a GUI. Install the Tailscale client and service once, then let it run in the background. For Ubuntu or Debian, run:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-fsSL&lt;/span&gt; https://tailscale.com/install.sh | sh
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Start Tailscale and sign in:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;tailscale up
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The command shows a sign-in URL; open it in a browser to authorize the device. Then check the Tailscale IP and status:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;tailscale ip &lt;span class="nt"&gt;-4&lt;/span&gt;
tailscale status
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Linux servers are a particularly good fit for this workflow: &lt;strong&gt;install once → run in the background → usually no further attention required&lt;/strong&gt;. In NimoteCode, use that &lt;code&gt;100.x.x.x&lt;/code&gt; address, port &lt;code&gt;22&lt;/code&gt;, your Linux username, and your password or SSH key.&lt;/p&gt;

&lt;h2&gt;
  
  
  Android: install Tailscale and connect NimoteCode
&lt;/h2&gt;

&lt;p&gt;Search Google Play for &lt;strong&gt;Tailscale&lt;/strong&gt;, install it, and then:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Open Tailscale.&lt;/li&gt;
&lt;li&gt;Sign in with the same account used on your Mac.&lt;/li&gt;
&lt;li&gt;Turn on the connection.&lt;/li&gt;
&lt;li&gt;Confirm that your Mac appears in the device list.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Next, open NimoteCode on Android and create a new SSH connection:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Host: 100.x.x.x
Port: 22
Username: your macOS username
Auth: Password or SSH Key
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Replace &lt;code&gt;100.x.x.x&lt;/code&gt; with the address returned by &lt;code&gt;tailscale ip -4&lt;/code&gt; on the Mac.&lt;/p&gt;

&lt;p&gt;Finally, turn off Wi-Fi on your phone and test once over &lt;strong&gt;4G/5G&lt;/strong&gt;. If NimoteCode can still connect to the Mac over SSH, you have successfully set up:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Android phone → Tailscale → home or office Mac → SSH&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Use your Tailscale connection in NimoteCode
&lt;/h2&gt;

&lt;p&gt;Tailscale gives your Android device and Mac or Linux machine a private network path. NimoteCode turns that private SSH connection into a complete mobile development workspace.&lt;/p&gt;

&lt;p&gt;After creating the connection in NimoteCode, you can:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Open the remote project root and browse it with Explorer instead of memorising paths.&lt;/li&gt;
&lt;li&gt;Edit source files directly on the Mac or Linux machine from your phone or tablet.&lt;/li&gt;
&lt;li&gt;Run tests, builds, Git commands and diagnostics in the integrated SSH terminal.&lt;/li&gt;
&lt;li&gt;Review Git diffs, branches and commits before you ship a change.&lt;/li&gt;
&lt;li&gt;Use AI Chat and Agent alongside the remote project, terminal output and code context.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is the difference between having remote access and being able to complete real development work away from your desk. Tailscale handles the secure private route; NimoteCode keeps the files, editor, terminal, Git review and AI assistance in one place.&lt;/p&gt;

&lt;h2&gt;
  
  
  What this setup gives you
&lt;/h2&gt;

&lt;p&gt;With Tailscale and NimoteCode, you can securely work from Android even when your devices are on different networks—without exposing SSH directly to the public internet or configuring router port forwarding.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>programming</category>
      <category>ssh</category>
      <category>productivity</category>
    </item>
    <item>
      <title>Can an AI Agent Really Code From a Phone?</title>
      <dc:creator>Miro Ma</dc:creator>
      <pubDate>Sun, 30 Aug 2026 13:58:04 +0000</pubDate>
      <link>https://dev.to/ma_dev/can-an-ai-agent-really-code-from-a-phone-4n26</link>
      <guid>https://dev.to/ma_dev/can-an-ai-agent-really-code-from-a-phone-4n26</guid>
      <description>&lt;p&gt;This is a real AI Agent demo inside NimoteCode.&lt;br&gt;
Starting from an almost empty workspace, the AI Agent plans the task, creates and edits code, runs commands, verifies the result, and finally commits the changes.&lt;br&gt;
Everything happens directly inside NimoteCode — a mobile SSH IDE built for developers.&lt;br&gt;
✅ Long-running AI coding tasks&lt;br&gt;
✅ SSH remote development&lt;br&gt;
✅ Terminal + Git + Code Editor&lt;br&gt;
✅ Automatic verification and code commits&lt;br&gt;
NimoteCode is available now on Google Play, with the App Store version coming soon.&lt;br&gt;
Search NimoteCode and start coding anywhere.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>programming</category>
      <category>productivity</category>
      <category>mobile</category>
    </item>
    <item>
      <title>Agent Design is Bounded Optimization, Not Intelligence</title>
      <dc:creator>Miro Ma</dc:creator>
      <pubDate>Sun, 05 Jul 2026 23:16:43 +0000</pubDate>
      <link>https://dev.to/ma_dev/agent-design-is-bounded-optimization-not-intelligence-hbl</link>
      <guid>https://dev.to/ma_dev/agent-design-is-bounded-optimization-not-intelligence-hbl</guid>
      <description>&lt;h2&gt;
  
  
  🧠 Introduction
&lt;/h2&gt;

&lt;p&gt;AI agents are often described as intelligent systems.&lt;/p&gt;

&lt;p&gt;However, after building and iterating multiple agent systems, a different pattern becomes clear:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;An agent is not intelligence.&lt;br&gt;
It is a &lt;strong&gt;bounded optimization process operating over partial information&lt;/strong&gt;.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fwngbkhhz559meirje06y.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fwngbkhhz559meirje06y.jpg" alt="agentdesc" width="799" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Formal View of an Agent
&lt;/h2&gt;

&lt;p&gt;We can define an agent policy as:&lt;/p&gt;

&lt;p&gt;π∗=argπmax​E[R(τ)]&lt;/p&gt;

&lt;p&gt;Where:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;( \pi ): policy (decision function)&lt;/li&gt;
&lt;li&gt;( \tau ): trajectory (sequence of actions + observations)&lt;/li&gt;
&lt;li&gt;( R ): reward function&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;At each step, the agent selects:&lt;/p&gt;

&lt;p&gt;at​=argamax​E[Q(st​,a)]&lt;/p&gt;




&lt;h2&gt;
  
  
  2. The Real-World Constraint
&lt;/h2&gt;

&lt;p&gt;In real systems, the assumptions above break:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;State ( s_t ) is partially observable&lt;/li&gt;
&lt;li&gt;Rewards are sparse and delayed&lt;/li&gt;
&lt;li&gt;Tool outputs are stochastic and noisy&lt;/li&gt;
&lt;li&gt;Environment is non-stationary&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So the agent is not solving global optimization.&lt;/p&gt;

&lt;p&gt;Instead, it performs:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;local greedy optimization over incomplete state&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  3. Why Agents Fail: Looping Behavior
&lt;/h2&gt;

&lt;p&gt;A key failure pattern emerges in practice:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;repeated file reads&lt;/li&gt;
&lt;li&gt;redundant tool calls&lt;/li&gt;
&lt;li&gt;over-exploration of same context&lt;/li&gt;
&lt;li&gt;non-terminating reasoning loops&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Why does this happen?&lt;/p&gt;

&lt;p&gt;Because locally:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;every action still has positive expected utility&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;So from the agent’s perspective:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;continuing to explore is always “reasonable”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This leads to optimization loops.&lt;/p&gt;




&lt;h2&gt;
  
  
  4. The Missing Dimension: Termination
&lt;/h2&gt;

&lt;p&gt;Most agent designs focus on:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;reasoning capability&lt;/li&gt;
&lt;li&gt;tool usage&lt;/li&gt;
&lt;li&gt;planning quality&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;But ignore a critical axis:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;When should the agent stop?&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Without termination control, the system degenerates into:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;infinite exploration&lt;/li&gt;
&lt;li&gt;tool loops&lt;/li&gt;
&lt;li&gt;unstable execution trajectories&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  5. Agent Design Space
&lt;/h2&gt;

&lt;p&gt;Agent behavior is fundamentally a trade-off between:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Exploration&lt;/strong&gt; (gathering information)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Exploitation&lt;/strong&gt; (executing actions)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Termination&lt;/strong&gt; (converging output)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;We can think of this as a constrained optimization system rather than pure reasoning.&lt;/p&gt;




&lt;h2&gt;
  
  
  6. Bounded Optimization Perspective
&lt;/h2&gt;

&lt;p&gt;A more accurate formulation is:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Intelligence = optimization&lt;br&gt;
Agent = bounded optimization&lt;br&gt;
Engineering = defining the bounds of optimization&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;These bounds include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;exploration budgets per module&lt;/li&gt;
&lt;li&gt;loop detection mechanisms&lt;/li&gt;
&lt;li&gt;phase separation (analysis → planning → execution)&lt;/li&gt;
&lt;li&gt;early stopping heuristics&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  7. Key Insight
&lt;/h2&gt;

&lt;p&gt;An important observation from practice:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Improving reasoning alone often increases instability.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Because stronger reasoning tends to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;increase exploration depth&lt;/li&gt;
&lt;li&gt;increase tool invocation frequency&lt;/li&gt;
&lt;li&gt;delay convergence&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Without proper constraints, this leads to worse system behavior.&lt;/p&gt;




&lt;h2&gt;
  
  
  🧩 Conclusion
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ft1vhllmio53eh8gtqawi.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ft1vhllmio53eh8gtqawi.png" alt="agent optimization" width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;An agent is not a system that “thinks better”.&lt;/p&gt;

&lt;p&gt;It is a system that:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;optimizes under constraints and knows when to stop optimizing&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

</description>
      <category>ai</category>
      <category>agents</category>
      <category>systemdesign</category>
      <category>productivity</category>
    </item>
    <item>
      <title>I built a mobile IDE with ~90% AI-generated code — but it still took me 6 months</title>
      <dc:creator>Miro Ma</dc:creator>
      <pubDate>Sat, 20 Jun 2026 13:55:31 +0000</pubDate>
      <link>https://dev.to/ma_dev/i-built-a-mobile-ide-with-90-ai-generated-code-but-it-still-took-me-6-months-2p7</link>
      <guid>https://dev.to/ma_dev/i-built-a-mobile-ide-with-90-ai-generated-code-but-it-still-took-me-6-months-2p7</guid>
      <description>&lt;p&gt;I recently shipped a mobile IDE on Google Play.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;~90% of the code was generated with AI tools. I handled architecture, product decisions, testing, and iteration.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;From the outside, this sounds like it should be fast.&lt;/p&gt;

&lt;p&gt;But in reality, it still took around &lt;strong&gt;6 months of continuous work&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F4ozb6ii7pxbz0sgh2nmt.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F4ozb6ii7pxbz0sgh2nmt.PNG" alt="NimoteCode P1" width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  What AI actually helped with
&lt;/h2&gt;

&lt;p&gt;AI significantly accelerated:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;boilerplate code&lt;/li&gt;
&lt;li&gt;UI implementation&lt;/li&gt;
&lt;li&gt;feature scaffolding&lt;/li&gt;
&lt;li&gt;refactoring suggestions&lt;/li&gt;
&lt;li&gt;debugging assistance&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It reduced the time spent on writing code line by line.&lt;/p&gt;




&lt;h2&gt;
  
  
  But what still took time
&lt;/h2&gt;

&lt;p&gt;Even with heavy AI usage, a large amount of time was still spent on:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;system design and architecture decisions&lt;/li&gt;
&lt;li&gt;ensuring correctness across features&lt;/li&gt;
&lt;li&gt;testing UI behavior across edge cases&lt;/li&gt;
&lt;li&gt;fixing inconsistent AI-generated logic&lt;/li&gt;
&lt;li&gt;integrating complex workflows (SSH, Git, remote execution)&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  The key reality
&lt;/h2&gt;

&lt;p&gt;For complex applications, AI doesn’t remove the hard parts of development.&lt;/p&gt;

&lt;p&gt;It shifts the workload.&lt;/p&gt;

&lt;p&gt;Instead of writing code, you spend more time:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;validating outputs&lt;/li&gt;
&lt;li&gt;correcting assumptions&lt;/li&gt;
&lt;li&gt;defining constraints clearly&lt;/li&gt;
&lt;li&gt;repeatedly testing real-world behavior&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  What I learned
&lt;/h2&gt;

&lt;p&gt;AI today is extremely good at &lt;strong&gt;speeding up implementation&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;But it is still far from replacing:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;system-level thinking&lt;/li&gt;
&lt;li&gt;product decisions&lt;/li&gt;
&lt;li&gt;correctness guarantees&lt;/li&gt;
&lt;li&gt;end-to-end testing&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In practice, it feels less like “AI builds software for you”&lt;br&gt;
and more like &lt;strong&gt;AI increases your throughput as a developer&lt;/strong&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  The app
&lt;/h2&gt;

&lt;p&gt;The result of this process is a mobile IDE:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;SSH remote development environments&lt;/li&gt;
&lt;li&gt;Git workflow support&lt;/li&gt;
&lt;li&gt;mobile code editing&lt;/li&gt;
&lt;li&gt;AI-assisted coding features&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It’s now live on Google Play:&lt;br&gt;
&lt;a href="https://play.google.com/store/apps/details?id=com.nimote.nimotecode&amp;amp;pcampaignid=web_share" rel="noopener noreferrer"&gt;https://play.google.com/store/apps/details?id=com.nimote.nimotecode&amp;amp;pcampaignid=web_share&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F0hawzi0zl1bye4ut36cv.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F0hawzi0zl1bye4ut36cv.png" alt="NimoteCOde Google Play Store screenshot" width="800" height="386"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Final thought
&lt;/h2&gt;

&lt;p&gt;AI didn’t reduce the need for developers.&lt;/p&gt;

&lt;p&gt;It changed what developers spend time on.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>programming</category>
      <category>showdev</category>
      <category>indiehackers</category>
    </item>
    <item>
      <title>Is Local Heavy Compilation Dead? The Rise of 2026 AI-Agentic Mobile IDEs 🚀</title>
      <dc:creator>Miro Ma</dc:creator>
      <pubDate>Fri, 12 Jun 2026 07:38:33 +0000</pubDate>
      <link>https://dev.to/ma_dev/is-local-heavy-compilation-dead-the-rise-of-2026-ai-agentic-mobile-ides-16pp</link>
      <guid>https://dev.to/ma_dev/is-local-heavy-compilation-dead-the-rise-of-2026-ai-agentic-mobile-ides-16pp</guid>
      <description>&lt;p&gt;Let’s be honest: until recently, the phrase &lt;strong&gt;"Mobile IDE"&lt;/strong&gt; felt like a bad joke. &lt;/p&gt;

&lt;p&gt;Who in their right mind would want to squint at a tiny tablet screen, fighting with heavy Gradle or Xcode compilations that turn an iPad into a literal frying pan? We all agreed: &lt;em&gt;Real developers need heavy local hardware.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;But it’s &lt;strong&gt;2026&lt;/strong&gt;, and the paradigm has completely broken. &lt;/p&gt;

&lt;p&gt;Mobile IDEs are no longer just "code editors on a tablet"—they have evolved into the ultimate &lt;strong&gt;"Thin-Client Windows" powered by autonomous AI Agents and Full-Stack Cloud Containers.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1rzx2jb1wouiztriaq43.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1rzx2jb1wouiztriaq43.png" alt="Mobile IDE NimoteCode" width="799" height="452"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  🛠️ The 2026 Shift: Three Core Pillars
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. From "Copilot Chat" to "Agentic Engineering"
&lt;/h3&gt;

&lt;p&gt;In 2024, we had chat windows for code autocompletion. In 2026, we have &lt;strong&gt;Autonomous AI Agents&lt;/strong&gt;. &lt;br&gt;
Modern Mobile IDEs feature background agents that scan your entire repository, read error logs, write tests, and deploy fixes inside cloud sandboxes without constant developer typing.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Multi-Modal "Visual Edits" (Goodbye, heavy typing!)
&lt;/h3&gt;

&lt;p&gt;Typing code on a touchscreen sucks. The solution? &lt;strong&gt;Direct UI Manipulation.&lt;/strong&gt;&lt;br&gt;
You can now directly tap or drag a UI component on your tablet preview. The AI Agent instantly maps that visual component to the underlying declarative code (SwiftUI, Jetpack Compose, or Flutter) and modifies it in real time. &lt;/p&gt;

&lt;h3&gt;
  
  
  3. 100% Cloud-Native + WASM Previews
&lt;/h3&gt;

&lt;p&gt;Local hardware constraints are neutralized. Heavy compilation, bundling, and dependency matching are completely offloaded to ultra-fast, ephemeral cloud containers. Your mobile device is just a low-latency rendering engine running WebAssembly.&lt;/p&gt;




&lt;h2&gt;
  
  
  📊 Paradigm Shift: 2024 vs 2026 Mobile Development
&lt;/h2&gt;

&lt;p&gt;To understand how drastically this changes our daily workflow, here is a quick breakdown:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Dimension&lt;/th&gt;
&lt;th&gt;2024 (Traditional Dev)&lt;/th&gt;
&lt;th&gt;2026 (Agentic &amp;amp; Cloud-Native)&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;AI's Primary Role&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Simple autocomplete &amp;amp; chat&lt;/td&gt;
&lt;td&gt;Autonomous engineering &amp;amp; self-healing bugs&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Core Interaction&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Heavy keyboard typing / Ext. Monitor&lt;/td&gt;
&lt;td&gt;Natural language + Multimodal Visual Edits&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Compilation&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Battery-draining local hardware&lt;/td&gt;
&lt;td&gt;100% offloaded to scalable Cloud Containers&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Barrier to Entry&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Pro-code mastery required&lt;/td&gt;
&lt;td&gt;Hybrid (Low-Code/AI-Generated architecture)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  🔥 Is Local Compilation Dead?
&lt;/h2&gt;

&lt;p&gt;We are moving away from the "Bring Your Own Heavy Laptop" era. When the cloud handles 99% of the heavy lifting and AI handles the syntax, a high-bandwidth network and a portable screen are all you need.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What do you think?&lt;/strong&gt; Are you still refusing to code without your multi-monitor desktop setup, or have you already used an iPad/folding screen to fix a critical production bug on the go? &lt;/p&gt;

&lt;p&gt;Let's argue in the comments below! 👇&lt;/p&gt;

</description>
      <category>ai</category>
      <category>programming</category>
      <category>mobile</category>
      <category>development</category>
    </item>
    <item>
      <title>Maybe the real limitation isn’t AI coding… 🤖
but the fact that developers still expect 100% deterministic control over every line of code.
That mindset might be the real bottleneck
Or are we just not ready for non-deterministic workflows yet? 👀
Thoughts？</title>
      <dc:creator>Miro Ma</dc:creator>
      <pubDate>Fri, 12 Jun 2026 03:44:18 +0000</pubDate>
      <link>https://dev.to/ma_dev/maybe-the-real-limitation-isnt-ai-coding-but-the-fact-that-developers-still-expect-100-3bi2</link>
      <guid>https://dev.to/ma_dev/maybe-the-real-limitation-isnt-ai-coding-but-the-fact-that-developers-still-expect-100-3bi2</guid>
      <description></description>
    </item>
    <item>
      <title>SSH + mobile coding is still broken — so I built my own IDE</title>
      <dc:creator>Miro Ma</dc:creator>
      <pubDate>Thu, 11 Jun 2026 15:17:34 +0000</pubDate>
      <link>https://dev.to/ma_dev/mobile-coding-tools-dont-work-for-real-development-so-i-built-my-own-ide-3goo</link>
      <guid>https://dev.to/ma_dev/mobile-coding-tools-dont-work-for-real-development-so-i-built-my-own-ide-3goo</guid>
      <description>&lt;p&gt;&lt;strong&gt;I’ve tried a lot of mobile coding tools—SSH apps, code editors, cloud IDEs.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Most of them feel useful… but incomplete.&lt;/p&gt;

&lt;p&gt;They either:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;only edit code&lt;/li&gt;
&lt;li&gt;or only provide a terminal&lt;/li&gt;
&lt;li&gt;or feel like a desktop tool squeezed into a phone&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;But real dev work isn’t just “writing code”.&lt;/p&gt;

&lt;p&gt;It’s:&lt;/p&gt;

&lt;p&gt;SSH + files + terminal + git — all together.&lt;/p&gt;




&lt;p&gt;So I started building a mobile-first IDE called &lt;strong&gt;NimoteCode&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The idea is simple:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;A workspace should include everything — not separate apps.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;ul&gt;
&lt;li&gt;Local &amp;amp; SSH workspaces&lt;/li&gt;
&lt;li&gt;Integrated terminal&lt;/li&gt;
&lt;li&gt;Code + project structure in one place&lt;/li&gt;
&lt;li&gt;Mobile-first UX (not desktop copy)&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fko1cyiuqp56lsitwhonb.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fko1cyiuqp56lsitwhonb.png" alt="NimoteCode P1" width="799" height="449"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fguioczic5h99zwp88lzj.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fguioczic5h99zwp88lzj.png" alt="NimoteCode P2" width="800" height="449"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Forvh43fttewk8hu5vc4i.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Forvh43fttewk8hu5vc4i.png" alt="NimoteCode P3" width="800" height="447"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Still early, but it’s currently in testing phase on Google Play.&lt;/p&gt;

&lt;p&gt;If you want to try it or give feedback, you can join the testing program here:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;🚀 Try NimoteCode (Closed Beta)&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;NimoteCode is currently in closed testing on Google Play.&lt;/p&gt;

&lt;p&gt;If you’re interested in mobile development workflows (SSH, coding, terminal, and workspace-based development), you’re welcome to try it and share feedback.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Join the tester group&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://groups.google.com/g/nimotecode-testers" rel="noopener noreferrer"&gt;https://groups.google.com/g/nimotecode-testers&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Wait for access to activate&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;It usually takes a few minutes after joining.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Install via Google Play&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://play.google.com/store/apps/details?id=com.nimote.nimotecode" rel="noopener noreferrer"&gt;https://play.google.com/store/apps/details?id=com.nimote.nimotecode&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;⚠️ Notes&lt;br&gt;
Please use the same Google account for both Google Groups and Google Play&lt;br&gt;
If the app doesn’t show up immediately, wait a bit and refresh&lt;br&gt;
This is still early — expect rough edges&lt;/p&gt;

&lt;p&gt;Feedback from real usage (especially SSH + mobile workflows) would be very valuable.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;👉 Do you think mobile development is actually usable today, or still fundamentally fragmented?&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>mobile</category>
      <category>productivity</category>
      <category>devops</category>
      <category>flutter</category>
    </item>
    <item>
      <title>Why Existing Flutter Code Editors Broke Down When I Built a Mobile IDE</title>
      <dc:creator>Miro Ma</dc:creator>
      <pubDate>Thu, 11 Jun 2026 07:41:13 +0000</pubDate>
      <link>https://dev.to/ma_dev/why-existing-flutter-code-editors-broke-down-when-i-built-a-mobile-ide-2593</link>
      <guid>https://dev.to/ma_dev/why-existing-flutter-code-editors-broke-down-when-i-built-a-mobile-ide-2593</guid>
      <description>&lt;p&gt;When I started building NimoteCode, I didn’t plan to write a code editor.&lt;/p&gt;

&lt;p&gt;My assumption was simple:&lt;/p&gt;

&lt;p&gt;Flutter already has code editor packages. I would just pick one and move on.&lt;/p&gt;

&lt;p&gt;There are several solid options:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;code_text_field&lt;/li&gt;
&lt;li&gt;flutter_code_editor&lt;/li&gt;
&lt;li&gt;re_editor&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;They all solve a similar problem well:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;How to display and edit code inside Flutter.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;So I did what most people would do:&lt;/p&gt;

&lt;p&gt;I tried to integrate one of them and focus on the “real product”:&lt;br&gt;
SSH, terminal, Git, AI workflows.&lt;/p&gt;

&lt;p&gt;That assumption broke quickly.&lt;/p&gt;




&lt;h2&gt;
  
  
  The problem wasn’t “editing code”
&lt;/h2&gt;

&lt;p&gt;It was this:&lt;/p&gt;

&lt;p&gt;I wasn’t building a code editor.&lt;/p&gt;

&lt;p&gt;I was building a mobile IDE.&lt;/p&gt;

&lt;p&gt;And those are fundamentally different systems.&lt;/p&gt;




&lt;h2&gt;
  
  
  Where existing editors start to break
&lt;/h2&gt;

&lt;p&gt;On paper, existing Flutter editors look complete:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;syntax highlighting&lt;/li&gt;
&lt;li&gt;folding&lt;/li&gt;
&lt;li&gt;autocomplete&lt;/li&gt;
&lt;li&gt;basic selection handling&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;But once I connected real IDE features, cracks started to appear:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;SSH remote files instead of local strings&lt;/li&gt;
&lt;li&gt;LSP needing full document lifecycle sync&lt;/li&gt;
&lt;li&gt;Git diff depending on editor state&lt;/li&gt;
&lt;li&gt;multi-panel UI sharing the same document&lt;/li&gt;
&lt;li&gt;large files streamed instead of loaded&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;At that point, the editor is no longer a component.&lt;/p&gt;

&lt;p&gt;It becomes shared infrastructure.&lt;/p&gt;




&lt;h2&gt;
  
  
  The key architectural difference
&lt;/h2&gt;

&lt;p&gt;The real shift is this:&lt;/p&gt;

&lt;p&gt;Most editor packages are built around &lt;strong&gt;text rendering&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;A mobile IDE needs an &lt;strong&gt;editor core&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;That difference changes everything.&lt;/p&gt;

&lt;p&gt;Instead of “a widget that edits text”, you need:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;a document model&lt;/li&gt;
&lt;li&gt;a layout system&lt;/li&gt;
&lt;li&gt;a state engine&lt;/li&gt;
&lt;li&gt;a sync layer for external systems&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Once multiple systems depend on the editor state, it can’t be passive anymore.&lt;/p&gt;

&lt;p&gt;It must become the source of truth.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why I eventually had to build my own editor
&lt;/h2&gt;

&lt;p&gt;The decision wasn’t about performance or missing features.&lt;/p&gt;

&lt;p&gt;It was about control over the model.&lt;/p&gt;

&lt;p&gt;Existing editors assume:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;local text&lt;/li&gt;
&lt;li&gt;single-file context&lt;/li&gt;
&lt;li&gt;UI-driven updates&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;My requirements were different:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;local + SSH remote files unified&lt;/li&gt;
&lt;li&gt;LSP lifecycle tightly bound to editor state&lt;/li&gt;
&lt;li&gt;Git diff tracking per tab lifecycle&lt;/li&gt;
&lt;li&gt;large files streamed in chunks&lt;/li&gt;
&lt;li&gt;mobile-first selection and interaction model&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These constraints conflict with widget-level architecture.&lt;/p&gt;

&lt;p&gt;So instead of extending an editor, I rebuilt the core abstraction.&lt;/p&gt;




&lt;h2&gt;
  
  
  What I built instead
&lt;/h2&gt;

&lt;p&gt;The new editor architecture is built around a shared core:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;EditorState as single source of truth&lt;/li&gt;
&lt;li&gt;FileLoader abstraction (local + remote)&lt;/li&gt;
&lt;li&gt;Streaming file ingestion for large files&lt;/li&gt;
&lt;li&gt;Tree-sitter + LSP hybrid analysis pipeline&lt;/li&gt;
&lt;li&gt;diff + CodeLens + symbols bound to document model&lt;/li&gt;
&lt;li&gt;mobile-first selection and coordinate system&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The key idea:&lt;/p&gt;

&lt;p&gt;Everything depends on the same document model.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F08xuqv5a4rmczm3ilfs2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F08xuqv5a4rmczm3ilfs2.png" alt="NimoteCode Code Editor" width="800" height="1781"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Not the UI.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwfgqu1brrlf7gir2ml7s.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwfgqu1brrlf7gir2ml7s.png" alt="NimoteCode tablet Code editor" width="800" height="497"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  The real advantage of self-building
&lt;/h2&gt;

&lt;p&gt;Rewriting the editor wasn’t about “adding features”.&lt;/p&gt;

&lt;p&gt;It unlocked structural advantages:&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Remote-first is native, not patched
&lt;/h3&gt;

&lt;p&gt;SSH files are not adapters — they are first-class documents.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. LSP becomes part of lifecycle
&lt;/h3&gt;

&lt;p&gt;Not a separate service, but synchronized with editor state.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Git diff becomes state-aware
&lt;/h3&gt;

&lt;p&gt;Not snapshot-based, but tab-aware.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Mobile editing is designed, not adapted
&lt;/h3&gt;

&lt;p&gt;Selection, handles, scrolling all operate on a custom coordinate system.&lt;/p&gt;

&lt;h3&gt;
  
  
  5. All IDE features share one model
&lt;/h3&gt;

&lt;p&gt;No duplicated state between panels.&lt;/p&gt;

&lt;p&gt;This is where complexity actually decreases long-term.&lt;/p&gt;




&lt;h2&gt;
  
  
  The conclusion I didn’t expect
&lt;/h2&gt;

&lt;p&gt;I originally thought:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;I will save time by using an existing editor.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;But the real outcome was the opposite:&lt;/p&gt;

&lt;p&gt;Using an existing editor would have shifted complexity elsewhere.&lt;/p&gt;

&lt;p&gt;Because the real problem wasn’t syntax highlighting.&lt;/p&gt;

&lt;p&gt;It was system design.&lt;/p&gt;

&lt;p&gt;And once you treat the editor as infrastructure instead of a widget, rebuilding it becomes the simplest consistent choice.&lt;/p&gt;




&lt;h1&gt;
  
  
  Final thought
&lt;/h1&gt;

&lt;p&gt;I didn’t replace a code editor.&lt;/p&gt;

&lt;p&gt;I replaced the assumption that a code editor is enough for a mobile IDE.&lt;/p&gt;

</description>
      <category>flutter</category>
      <category>rust</category>
      <category>ios</category>
      <category>android</category>
    </item>
    <item>
      <title>Why I Decided to Build a Mobile IDE Instead of Another AI App</title>
      <dc:creator>Miro Ma</dc:creator>
      <pubDate>Tue, 09 Jun 2026 10:38:17 +0000</pubDate>
      <link>https://dev.to/ma_dev/why-i-decided-to-build-a-mobile-ide-instead-of-another-ai-app-1iap</link>
      <guid>https://dev.to/ma_dev/why-i-decided-to-build-a-mobile-ide-instead-of-another-ai-app-1iap</guid>
      <description>&lt;p&gt;I used to work at a company, focusing on low-level system development. The work was technically solid but often felt fragmented. Over time, I realized I was mostly working within narrow boundaries of large systems, which made it harder to stay connected to the bigger picture of what I was building.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8niv1boc2dmi6yo3oct8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8niv1boc2dmi6yo3oct8.png" alt="coder" width="719" height="427"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;When AI started to rapidly evolve, like many developers, I found myself both excited and uncertain. The capability of AI in coding tasks grew faster than expected, and it naturally raised questions about the future of software development roles.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fuud7xdp5lnjbkmcewx9q.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fuud7xdp5lnjbkmcewx9q.png" alt="chatgpt_write code" width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;But over time, my perspective shifted. Instead of thinking about AI as a replacement force, I began to see it as a shift in how software is created and interacted with.&lt;/p&gt;

&lt;p&gt;That shift pulled me toward a different question:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;What does a native AI application actually look like on a mobile device?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;At first, the market seemed full of AI apps. New products appeared constantly—chatbots, writing tools, coding assistants, automation tools. But the more I explored, the more I noticed a pattern.&lt;/p&gt;

&lt;p&gt;Most AI applications were still built around a very narrow interaction model:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A prompt box&lt;/li&gt;
&lt;li&gt;A response output&lt;/li&gt;
&lt;li&gt;Some form of lightweight workflow wrapping&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fb0micxszjq2dnym3jsb1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fb0micxszjq2dnym3jsb1.png" alt="PC IDE" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Even when the underlying models were powerful, the product surface remained relatively simple and repetitive.&lt;/p&gt;

&lt;p&gt;This led me to a realization:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;The AI application layer on mobile is still in its early form—mostly conversational, not system-driven.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That distinction became important.&lt;/p&gt;

&lt;p&gt;Because AI is not just about generating responses. It is increasingly about orchestrating actions, systems, and workflows.&lt;/p&gt;

&lt;p&gt;And that is where I started to rethink the role of a “mobile IDE”.&lt;/p&gt;




&lt;h2&gt;
  
  
  Rethinking What an AI Application Can Be
&lt;/h2&gt;

&lt;p&gt;Most AI apps today focus on interaction—asking questions and receiving answers.&lt;/p&gt;

&lt;p&gt;But software development, even at a simplified level, is not just conversation. It is a structured process involving:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Understanding context&lt;/li&gt;
&lt;li&gt;Generating or modifying logic&lt;/li&gt;
&lt;li&gt;Executing actions&lt;/li&gt;
&lt;li&gt;Observing results&lt;/li&gt;
&lt;li&gt;Iterating continuously&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In most AI tools, these steps are disconnected. The user is still responsible for bridging the gap between intention and execution.&lt;/p&gt;

&lt;p&gt;This creates a subtle limitation:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;AI can generate output, but it does not own the workflow.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;So I started to ask a different question:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;What if an AI application on mobile could own the entire loop, not just the response?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Not just answering prompts, but managing a continuous system of:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;intent → generation → execution → feedback → iteration&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is where the idea of a mobile IDE began to form, but not as a traditional “development tool”.&lt;/p&gt;

&lt;p&gt;Instead, as something closer to a &lt;strong&gt;workflow-native AI application&lt;/strong&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  From Tools to AI-Native Workflows
&lt;/h2&gt;

&lt;p&gt;The more I explored AI systems, the clearer it became that the real shift is not about individual features like code generation or chat interfaces.&lt;/p&gt;

&lt;p&gt;The real shift is structural:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;AI is turning software from static tools into dynamic workflows.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;In this context, the concept of an IDE changes meaning.&lt;/p&gt;

&lt;p&gt;It is no longer just an environment for editing code.&lt;/p&gt;

&lt;p&gt;It becomes a system that can:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;understand user intent&lt;/li&gt;
&lt;li&gt;generate structured outputs&lt;/li&gt;
&lt;li&gt;execute actions in real environments&lt;/li&gt;
&lt;li&gt;observe results&lt;/li&gt;
&lt;li&gt;and continue iterating&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In other words:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;The IDE becomes a workflow engine powered by AI.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This is especially relevant in a mobile context, where interaction is naturally intent-driven rather than process-heavy.&lt;/p&gt;

&lt;p&gt;Users don’t want to manage systems manually on a small screen. They want to express intent and see results.&lt;/p&gt;

&lt;p&gt;So the question is no longer:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;How do we shrink a development environment into mobile?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;But instead:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;What does an AI-native workflow application look like on mobile?&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  The Shift in Interaction Model
&lt;/h2&gt;

&lt;p&gt;Traditional software interactions are based on explicit control:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;open tools&lt;/li&gt;
&lt;li&gt;configure environments&lt;/li&gt;
&lt;li&gt;execute steps manually&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;But AI changes the interaction model fundamentally.&lt;/p&gt;

&lt;p&gt;It introduces a new pattern:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;intent-driven execution&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Where the user provides:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;goals&lt;/li&gt;
&lt;li&gt;constraints&lt;/li&gt;
&lt;li&gt;context&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And the system handles:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;decomposition&lt;/li&gt;
&lt;li&gt;execution&lt;/li&gt;
&lt;li&gt;orchestration&lt;/li&gt;
&lt;li&gt;iteration&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This shift makes mobile devices particularly interesting—not because they are “limited versions of desktops”, but because they naturally align with intent-driven interaction.&lt;/p&gt;

&lt;p&gt;Mobile is not a constraint here.&lt;/p&gt;

&lt;p&gt;It is actually a natural interface for AI-native workflows:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;short inputs&lt;/li&gt;
&lt;li&gt;fast iterations&lt;/li&gt;
&lt;li&gt;contextual usage&lt;/li&gt;
&lt;li&gt;continuous interaction loops&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  What a Mobile IDE Actually Becomes
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjpyljnm5e6oueear6qfr.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjpyljnm5e6oueear6qfr.png" alt="NimoteCode" width="799" height="452"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In this framing, a mobile IDE is not a tool for writing code.&lt;/p&gt;

&lt;p&gt;It becomes a system that connects three layers:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Intent Layer&lt;/strong&gt;&lt;br&gt;
Users express what they want to achieve in natural language.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. AI Orchestration Layer&lt;/strong&gt;&lt;br&gt;
The system interprets intent, generates solutions, and plans execution steps.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Execution Layer&lt;/strong&gt;&lt;br&gt;
Remote environments, APIs, services, and workflows are triggered and managed.&lt;/p&gt;

&lt;p&gt;So the product is no longer defined by “editing capability”.&lt;/p&gt;

&lt;p&gt;It is defined by:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;the ability to turn intent into executed systems.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This is the key difference.&lt;/p&gt;

&lt;p&gt;A mobile IDE in this sense is not a scaled-down development environment.&lt;/p&gt;

&lt;p&gt;It is an &lt;strong&gt;AI-native workflow application that happens to include development as one of its capabilities&lt;/strong&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why This Matters Now
&lt;/h2&gt;

&lt;p&gt;The reason this direction feels important is because AI is collapsing the gap between:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;thinking&lt;/li&gt;
&lt;li&gt;describing&lt;/li&gt;
&lt;li&gt;and executing&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;As that gap shrinks, the value of software shifts upward:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;from tools that require manual operation&lt;br&gt;
to systems that respond directly to intent&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;In that world, the most important product question becomes:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;How quickly can a user turn an idea into a working system?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Not how many features a tool has.&lt;/p&gt;

&lt;p&gt;Not how complete an environment is.&lt;/p&gt;

&lt;p&gt;But how directly intent can become execution.&lt;/p&gt;




&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;Looking back, the decision to build a mobile IDE was not really about development tools.&lt;/p&gt;

&lt;p&gt;It was about recognizing a shift in what AI applications are becoming.&lt;/p&gt;

&lt;p&gt;From my perspective, the next generation of AI applications will not be chat interfaces or standalone tools.&lt;/p&gt;

&lt;p&gt;They will be:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;workflow-driven systems that translate intent into action.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;A mobile IDE, in this sense, is just one early form of that direction:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;an AI-native application where interaction, generation, and execution are part of a single continuous loop.&lt;/p&gt;
&lt;/blockquote&gt;

</description>
      <category>ai</category>
      <category>programming</category>
      <category>futurechallenge</category>
      <category>productivity</category>
    </item>
  </channel>
</rss>
