<?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: RYO ITABASHI</title>
    <description>The latest articles on DEV Community by RYO ITABASHI (@ryoitabashi).</description>
    <link>https://dev.to/ryoitabashi</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.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3861198%2F30a637f3-e537-4353-8c4f-6421e249bf22.jpg</url>
      <title>DEV Community: RYO ITABASHI</title>
      <link>https://dev.to/ryoitabashi</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/ryoitabashi"/>
    <language>en</language>
    <item>
      <title>I Can't Write Code. But I Shipped a Native Android Terminal IDE with Claude Code + Codex Running Natively — No Termux Required.</title>
      <dc:creator>RYO ITABASHI</dc:creator>
      <pubDate>Tue, 28 Apr 2026 14:07:07 +0000</pubDate>
      <link>https://dev.to/ryoitabashi/i-cant-write-code-but-i-shipped-a-native-android-terminal-ide-with-claude-code-codex-running-21ja</link>
      <guid>https://dev.to/ryoitabashi/i-cant-write-code-but-i-shipped-a-native-android-terminal-ide-with-claude-code-codex-running-21ja</guid>
      <description>&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%2Fn0o8oxvc85mf7513e6ta.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.amazonaws.com%2Fuploads%2Farticles%2Fn0o8oxvc85mf7513e6ta.jpg" alt=" " width="800" height="931"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Update: v0.1.0 Released
&lt;/h2&gt;

&lt;p&gt;Since my last post, everything changed.&lt;/p&gt;

&lt;p&gt;The WebView terminal is gone. Termux is no longer required. &lt;br&gt;
Claude Code and Codex now run natively on Android — &lt;br&gt;
in the same process as your shell, with zero TCP, zero IPC.&lt;/p&gt;

&lt;p&gt;This is what shipped.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Problem I Kept Running Into
&lt;/h2&gt;

&lt;p&gt;Claude Code broke in Termux. Codex broke in Termux. &lt;br&gt;
Every update was a gamble.&lt;/p&gt;

&lt;p&gt;So I directed the AI to throw away the entire architecture &lt;br&gt;
and rebuild it from scratch.&lt;/p&gt;




&lt;h2&gt;
  
  
  What Changed
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Before (Plan A):&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;WebView terminal via ttyd&lt;/li&gt;
&lt;li&gt;Termux required&lt;/li&gt;
&lt;li&gt;TCP socket between terminal and app&lt;/li&gt;
&lt;li&gt;Died every time I switched apps&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;After (Plan B):&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Native PTY via JNI forkpty — same process, zero IPC, zero TCP&lt;/li&gt;
&lt;li&gt;Termux not required&lt;/li&gt;
&lt;li&gt;bash, Node.js, Python 3, git, curl, ripgrep, jq, tmux, vim, 
sqlite3 bundled inside the APK as .so files&lt;/li&gt;
&lt;li&gt;Executed via /system/bin/linker64 to bypass SELinux's 
execve restrictions on app_data_file context&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;As far as I know, this is the only React Native app in the &lt;br&gt;
world with an embedded native terminal emulator running &lt;br&gt;
in-process via JNI.&lt;/p&gt;




&lt;h2&gt;
  
  
  Claude Code + Codex on Android
&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%2Fhc5hure6r9n49r2j366n.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.amazonaws.com%2Fuploads%2Farticles%2Fhc5hure6r9n49r2j366n.jpg" alt=" " width="800" height="882"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Both now run natively through Shelly's managed runtime:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Claude Code 2.1.121 (Opus 4.7, 1M context) ✅&lt;/li&gt;
&lt;li&gt;Codex v0.124.0-termux (GPT-5.5) ✅&lt;/li&gt;
&lt;li&gt;Gemini CLI 0.39.1 ✅&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The runtime hot-swaps updates without an APK rebuild. &lt;br&gt;
Broken versions are logged and cooled down automatically.&lt;/p&gt;

&lt;p&gt;If Claude Code or Codex broke in your Termux setup — &lt;br&gt;
this is the maintained path.&lt;/p&gt;




&lt;p&gt;4 live panes simultaneously:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Top left: Claude Code terminal&lt;/li&gt;
&lt;li&gt;Top right: Codex (GPT-5.5)&lt;/li&gt;
&lt;li&gt;Bottom left: Cerebras AI pane with READING TERMINAL&lt;/li&gt;
&lt;li&gt;Bottom right: Browser pane with YouTube&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  What Works Today
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Native terminal with inline command blocks&lt;/li&gt;
&lt;li&gt;Multi-pane layout (up to 4 live panes)&lt;/li&gt;
&lt;li&gt;Cross-pane intelligence — AI reads terminal output automatically&lt;/li&gt;
&lt;li&gt;Multi-agent routing: Claude, Gemini, Cerebras, Groq, 
Perplexity, Codex, Local LLM via llama.cpp&lt;/li&gt;
&lt;li&gt;File editing with per-hunk InlineDiff accept/reject&lt;/li&gt;
&lt;li&gt;
&lt;a class="mentioned-user" href="https://dev.to/team"&gt;@team&lt;/a&gt; multi-model consensus&lt;/li&gt;
&lt;li&gt;SSH profiles&lt;/li&gt;
&lt;li&gt;CRT mode (scanlines + phosphor green + vignette)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Known Limitations
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Claude Code first-run OAuth requires credential transplant&lt;/li&gt;
&lt;li&gt;Ports monitor blocked by Android 10+ SELinux (bug #99)&lt;/li&gt;
&lt;li&gt;Test coverage is thin&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Try It
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;GitHub:&lt;/strong&gt; &lt;a href="https://github.com/RYOITABASHI/Shelly" rel="noopener noreferrer"&gt;https://github.com/RYOITABASHI/Shelly&lt;/a&gt;&lt;br&gt;&lt;br&gt;
&lt;strong&gt;APK:&lt;/strong&gt; GitHub Releases&lt;br&gt;&lt;br&gt;
&lt;strong&gt;License:&lt;/strong&gt; GPLv3&lt;/p&gt;

&lt;p&gt;Rough edges exist. That's why it's open source.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>android</category>
      <category>vibecoding</category>
      <category>opensource</category>
    </item>
    <item>
      <title>I Can't Write Code. But I Built a 100,000-Line Terminal IDE on My Phone.</title>
      <dc:creator>RYO ITABASHI</dc:creator>
      <pubDate>Sat, 04 Apr 2026 16:35:18 +0000</pubDate>
      <link>https://dev.to/ryoitabashi/i-cant-write-code-but-i-built-a-100000-line-terminal-ide-on-my-phone-2mcj</link>
      <guid>https://dev.to/ryoitabashi/i-cant-write-code-but-i-built-a-100000-line-terminal-ide-on-my-phone-2mcj</guid>
      <description>&lt;h2&gt;
  
  
  I can't write code.
&lt;/h2&gt;

&lt;p&gt;I'm not an engineer. I've never written a line of TypeScript. I have no formal training in computer science.&lt;/p&gt;

&lt;p&gt;But I built a 100,000-line terminal IDE — by talking to AI.&lt;/p&gt;

&lt;p&gt;Every architectural decision is mine. The code is not. It was created through conversation with Claude Code, running inside Termux on a Samsung Galaxy Z Fold6. No desktop. No laptop. Just a foldable phone and an AI that can execute commands.&lt;/p&gt;

&lt;p&gt;Today I'm releasing it as open source.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;GitHub:&lt;/strong&gt; &lt;a href="https://github.com/RYOITABASHI/Shelly" rel="noopener noreferrer"&gt;github.com/RYOITABASHI/Shelly&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%2Fjxwq7wvsc7ak34le5huu.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.amazonaws.com%2Fuploads%2Farticles%2Fjxwq7wvsc7ak34le5huu.jpg" alt="Shelly hero image" width="800" height="881"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  The Problem
&lt;/h2&gt;

&lt;p&gt;You're running Claude Code in the terminal. It throws an error. You copy it. You switch to ChatGPT. You paste. You ask "what went wrong?" You copy the fix. You switch back. You paste. You run it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Seven steps. Every single time.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The terminal and the chat live in different worlds. You are the copy-paste bridge between them.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Solution
&lt;/h2&gt;

&lt;p&gt;Shelly puts Chat and Terminal side by side — and connects them with AI.&lt;/p&gt;

&lt;p&gt;Say &lt;strong&gt;"fix the error on the right"&lt;/strong&gt;. Shelly reads the terminal output, understands the error, and generates an executable command. Tap &lt;strong&gt;▶ Run&lt;/strong&gt; and the fix lands directly in the Terminal.&lt;/p&gt;

&lt;p&gt;No copy. No paste. No tab switching.&lt;/p&gt;




&lt;h2&gt;
  
  
  What makes it different
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Native terminal emulator.&lt;/strong&gt; Not a WebView. Kotlin code derived from Termux's terminal-emulator library, rendering on an Android Canvas. Connected via a C helper (&lt;code&gt;forkpty()&lt;/code&gt;) over TCP localhost. As far as I know, this is the only React Native app with an embedded native terminal emulator.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;12 AI agents.&lt;/strong&gt; &lt;code&gt;@claude&lt;/code&gt;, &lt;code&gt;@gemini&lt;/code&gt;, &lt;code&gt;@codex&lt;/code&gt;, &lt;code&gt;@cerebras&lt;/code&gt;, &lt;code&gt;@local&lt;/code&gt;, &lt;code&gt;@perplexity&lt;/code&gt;, &lt;code&gt;@team&lt;/code&gt;, &lt;code&gt;@plan&lt;/code&gt;, &lt;code&gt;@arena&lt;/code&gt;, &lt;code&gt;@actions&lt;/code&gt;. The input router automatically selects the best AI for the task, or you choose with @mentions.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;It runs on your phone.&lt;/strong&gt; Not in the cloud. Not on a desktop. Shelly + Termux gives you a full development environment in your pocket.&lt;/p&gt;




&lt;h2&gt;
  
  
  Key Features
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Cross-pane intelligence&lt;/strong&gt; — AI reads terminal output, suggests fixes, one-tap execution&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;ActionBlock&lt;/strong&gt; — Code blocks in AI responses have [▶ Run] buttons&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Approval Proxy&lt;/strong&gt; — Terminal [Y/n] prompts become native chat buttons&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Auto-savepoint&lt;/strong&gt; — Game-like save system. Every change auto-committed. Revert with one tap.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Plan Mode&lt;/strong&gt; — AI generates step cards. Execute or skip each step.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Arena Mode&lt;/strong&gt; — Same prompt, two AIs, blind comparison. Vote for the better one.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Click-to-Edit&lt;/strong&gt; — Tap any element in the preview panel, tell the AI what to change&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;VoiceChain&lt;/strong&gt; — Speak → execute → TTS response. Hands-free development.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;GitHub integration&lt;/strong&gt; — AI suggests when to push. &lt;code&gt;@actions&lt;/code&gt; sets up CI/CD without YAML.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;5-level command safety&lt;/strong&gt; — Every command is risk-assessed before execution&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Local LLM support&lt;/strong&gt; — Run models on-device via llama.cpp. Fully offline capable.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  The keyboard too
&lt;/h2&gt;

&lt;p&gt;The keyboard you see in the screenshots is &lt;strong&gt;Nacre&lt;/strong&gt; — an 11,000-line Android IME I built (also through AI) to solve the input problem on mobile.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/RYOITABASHI/Nacre" rel="noopener noreferrer"&gt;github.com/RYOITABASHI/Nacre&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Built with
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Layer&lt;/th&gt;
&lt;th&gt;Technology&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Framework&lt;/td&gt;
&lt;td&gt;Expo 54 / React Native 0.81&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Language&lt;/td&gt;
&lt;td&gt;TypeScript + Kotlin + C&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Terminal&lt;/td&gt;
&lt;td&gt;Native emulator (Termux-derived) + Direct PTY (C, forkpty)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;State&lt;/td&gt;
&lt;td&gt;Zustand&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;i18n&lt;/td&gt;
&lt;td&gt;900+ keys, English/Japanese&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  Why I built this
&lt;/h2&gt;

&lt;p&gt;I'm a creative director. I wanted to use Claude Code on my phone, but Termux was too intimidating. So I made a chat interface that hides the complexity while keeping the full power.&lt;/p&gt;

&lt;p&gt;Then I realized the real problem wasn't the terminal — it was the gap between the terminal and the AI. So I connected them.&lt;/p&gt;

&lt;p&gt;Then the WebView kept dying every time I switched apps. So I directed the AI to replace the entire rendering layer with a native terminal emulator written in Kotlin and C.&lt;/p&gt;

&lt;p&gt;100,000 lines later, I still can't write code. But I can describe what I need, and the AI builds it.&lt;/p&gt;




&lt;h2&gt;
  
  
  Try it
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;GitHub:&lt;/strong&gt; &lt;a href="https://github.com/RYOITABASHI/Shelly" rel="noopener noreferrer"&gt;github.com/RYOITABASHI/Shelly&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;APK:&lt;/strong&gt; &lt;a href="https://github.com/RYOITABASHI/Shelly/releases" rel="noopener noreferrer"&gt;GitHub Releases&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;GPL v3. Built entirely on a Samsung Galaxy Z Fold6, in Termux, without ever touching a desktop computer.&lt;/p&gt;

&lt;p&gt;Feedback, issues, and PRs welcome.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>opensource</category>
      <category>android</category>
      <category>vibecoding</category>
    </item>
  </channel>
</rss>
