<?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: Grokkris</title>
    <description>The latest articles on DEV Community by Grokkris (@grokkris_267433fde5540f5b).</description>
    <link>https://dev.to/grokkris_267433fde5540f5b</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%2F4117609%2Ff95ba8e0-0951-45bf-ad7b-5af2d4d9b2c5.png</url>
      <title>DEV Community: Grokkris</title>
      <link>https://dev.to/grokkris_267433fde5540f5b</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/grokkris_267433fde5540f5b"/>
    <language>en</language>
    <item>
      <title>My Android AI agent writes every file as Markdown first. Here's why that made DOCX, XLSX and PDF less painful</title>
      <dc:creator>Grokkris</dc:creator>
      <pubDate>Tue, 20 Oct 2026 16:43:54 +0000</pubDate>
      <link>https://dev.to/grokkris_267433fde5540f5b/my-android-ai-agent-writes-every-file-as-markdown-first-heres-why-that-made-docx-xlsx-and-pdf-3e4h</link>
      <guid>https://dev.to/grokkris_267433fde5540f5b/my-android-ai-agent-writes-every-file-as-markdown-first-heres-why-that-made-docx-xlsx-and-pdf-3e4h</guid>
      <description>&lt;p&gt;I'm building Kryzz AI, a free, open-source (MIT) Android app for chat, voice and agent tasks. One thing people actually use the agent for is getting a real file at the end: a report as a DOCX, a table as an XLSX, something you can send as a PDF.&lt;/p&gt;

&lt;p&gt;Three formats get messy fast if each exporter has its own idea of what a heading or a table is. A table can look fine in one format and come out flat in another, and fixing one can break the next.&lt;/p&gt;

&lt;p&gt;So in v1.1.2 all three share one Markdown model.&lt;/p&gt;

&lt;h2&gt;
  
  
  What that means in practice
&lt;/h2&gt;

&lt;p&gt;The agent writes its output once, as structured Markdown. Then each exporter reads the same structure:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Headings and lists&lt;/strong&gt; come out as real headings and lists in the DOCX, not bold text pretending to be a heading.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tables&lt;/strong&gt; keep their shape across DOCX and PDF.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Spreadsheets get typed cells.&lt;/strong&gt; A number stays a number, so you can actually sum a column in the XLSX instead of fighting text that looks like numbers.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Multi-sheet workbooks&lt;/strong&gt; work, so a research task can put sources on one sheet and the summary on another.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;PDFs handle Unicode&lt;/strong&gt;, which matters to me because I write in both English and French.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Why I like this setup
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;The model only has to be good at one thing: writing clean Markdown. Models are already decent at that.&lt;/li&gt;
&lt;li&gt;When an export looks wrong, there's one place to look.&lt;/li&gt;
&lt;li&gt;Adding a new output later should mostly mean writing one more exporter, not teaching the agent a new format.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The rest of the loop, briefly
&lt;/h2&gt;

&lt;p&gt;The file is the last step. Before it, the agent keeps a live checklist plan, runs searches and page reads, and for substantial answers does one review pass against what the tools actually returned. Under each answer there's a work log ("3 searches · read 4 pages · 1 file") so you can see what it did. There's also a per-turn cost cap (default $0.25) because you bring your own OpenRouter key and pay for your own usage.&lt;/p&gt;

&lt;h2&gt;
  
  
  Honest notes
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;The models are not on-device. Requests go from your phone to OpenRouter (or the optional providers you turn on). No analytics, no telemetry, no bundled keys.&lt;/li&gt;
&lt;li&gt;Generated files stay in private app storage until you share them.&lt;/li&gt;
&lt;li&gt;The APK on the release page is a debug build, Android 9+.&lt;/li&gt;
&lt;/ul&gt;

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

&lt;ul&gt;
&lt;li&gt;Release (v1.1.2): &lt;a href="https://github.com/kriddss3/kryzz-ai/releases/tag/v1.1.2" rel="noopener noreferrer"&gt;https://github.com/kriddss3/kryzz-ai/releases/tag/v1.1.2&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Source: &lt;a href="https://github.com/kriddss3/kryzz-ai" rel="noopener noreferrer"&gt;https://github.com/kriddss3/kryzz-ai&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you've built document export on Android, I'd like to know what you used and what broke. And if you try the app, tell me which file type comes out worst. That's the one I'll fix next.&lt;/p&gt;

</description>
      <category>kotlin</category>
      <category>androiddev</category>
      <category>showdev</category>
      <category>opensource</category>
    </item>
    <item>
      <title>I sent my Android app to ~20 AI directories in a week. Almost none of it moved downloads.</title>
      <dc:creator>Grokkris</dc:creator>
      <pubDate>Mon, 19 Oct 2026 16:48:47 +0000</pubDate>
      <link>https://dev.to/grokkris_267433fde5540f5b/i-sent-my-android-app-to-20-ai-directories-in-a-week-almost-none-of-it-moved-downloads-gi1</link>
      <guid>https://dev.to/grokkris_267433fde5540f5b/i-sent-my-android-app-to-20-ai-directories-in-a-week-almost-none-of-it-moved-downloads-gi1</guid>
      <description>&lt;p&gt;I'm a student and I build Kryzz AI on the side. It's a free, MIT-licensed Android app: you give an agent a task, it shows a checklist plan first, searches and reads pages, then hands you an actual DOCX, XLSX or PDF. Models go through your own OpenRouter key, everything else stays on the phone.&lt;/p&gt;

&lt;p&gt;Last week I gave myself a goal: go from 141 to 200 total APK downloads on GitHub in about ten days. I'm at 166 right now, so not there yet, but the split was useful.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Around 20 small "submit your AI tool" directories.&lt;/strong&gt; Roughly one extra download a day across all of them. Most are still "in review", and a few wanted a backlink badge or a paid fast lane, which I skipped.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Show HN.&lt;/strong&gt; 2 points, no comments.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Dev.to posts.&lt;/strong&gt; Close to zero reactions so far (hi, if you're reading this one).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;One XDA Forums thread.&lt;/strong&gt; The first place where people asked real questions: how the cost cap works, how good the generated files are, whether voice mode handles interruptions. The day I answered them, downloads went from 155 to 166. Can't prove it was only that, but it's the biggest jump of the week.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What I think it means
&lt;/h2&gt;

&lt;p&gt;Listings don't bring people, conversations do. Places where Android users already hang out beat places built for launching. A thread where someone can ask "does it actually do X" and get a straight answer seems worth more than twenty listings nobody browses.&lt;/p&gt;

&lt;h2&gt;
  
  
  Two things I'm still unsure about
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;The APK is a debug build for now. Would that stop you installing from GitHub, or for a free app do you not care?&lt;/li&gt;
&lt;li&gt;Would you put a big "Download APK" link at the very top of the README, or does that look desperate?&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Repo and APK if you want to poke at it: &lt;a href="https://github.com/kriddss3/kryzz-ai/releases/tag/v1.1.2" rel="noopener noreferrer"&gt;https://github.com/kriddss3/kryzz-ai/releases/tag/v1.1.2&lt;/a&gt;&lt;/p&gt;

</description>
      <category>showdev</category>
      <category>android</category>
      <category>marketing</category>
      <category>opensource</category>
    </item>
    <item>
      <title>I gave my Android AI agent a $0.25 budget per task. Here's how it still finishes.</title>
      <dc:creator>Grokkris</dc:creator>
      <pubDate>Sun, 18 Oct 2026 10:54:33 +0000</pubDate>
      <link>https://dev.to/grokkris_267433fde5540f5b/i-gave-my-android-ai-agent-a-025-budget-per-task-heres-how-it-still-finishes-20o3</link>
      <guid>https://dev.to/grokkris_267433fde5540f5b/i-gave-my-android-ai-agent-a-025-budget-per-task-heres-how-it-still-finishes-20o3</guid>
      <description>&lt;p&gt;I've been building Kryzz AI, a free MIT-licensed Android app where you hand an agent a task and it plans, searches, reads pages and gives you back an actual file. It runs on your own OpenRouter key, so every step it takes costs you real money. That made one problem impossible to ignore: agent loops quietly burn credit.&lt;/p&gt;

&lt;h2&gt;
  
  
  The problem
&lt;/h2&gt;

&lt;p&gt;On a laptop you might watch an agent run. On a phone you put it in your pocket. If the agent decides to search twelve more times "just to be sure", you find out when you check your OpenRouter balance. People who bring their own key notice that fast, and they don't come back.&lt;/p&gt;

&lt;h2&gt;
  
  
  The rule
&lt;/h2&gt;

&lt;p&gt;Every turn has a hard cost cap. The default is $0.25 and you can raise it up to $2 in settings. The planning step doesn't count against that budget, so the agent can always at least tell you what it intends to do.&lt;/p&gt;

&lt;h2&gt;
  
  
  What happens when it hits the cap
&lt;/h2&gt;

&lt;p&gt;This is the part I spent the most time on. The easy version is to throw a "budget exceeded" error and stop. That's the worst outcome: you paid for the searches and got nothing.&lt;/p&gt;

&lt;p&gt;Instead, when the cap is close, the agent stops calling tools and writes the best answer it can from what it already collected. The work log under the answer shows what it did and what it skipped, so you can tell whether to rerun with a bigger budget or whether it's good enough.&lt;/p&gt;

&lt;h2&gt;
  
  
  Fast / Balanced / Max
&lt;/h2&gt;

&lt;p&gt;The cap works together with three quality modes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Fast&lt;/strong&gt; skips the review pass and keeps the step count low.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Balanced&lt;/strong&gt; is the default.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Max&lt;/strong&gt; gets a 24-step budget plus a review pass before it hands the answer over.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Most of my own tasks run fine on Balanced. Max is for the "compare these and give me a spreadsheet" kind of task where a second look actually catches mistakes.&lt;/p&gt;

&lt;h2&gt;
  
  
  An example run
&lt;/h2&gt;

&lt;p&gt;Prompt: "Compare 3 budget phones, read the reviews and make me a spreadsheet."&lt;/p&gt;

&lt;p&gt;It shows the plan as a checklist first, runs the searches and page reads in parallel, checks the numbers, and returns an .xlsx with sources. The chip under the answer says something like "3 searches · read 4 pages · 1 file", and tapping it shows every query and URL.&lt;/p&gt;

&lt;p&gt;  &lt;iframe src="https://www.youtube.com/embed/RheYy473mRU" width="710" height="399"&gt;
  &lt;/iframe&gt;
&lt;/p&gt;

&lt;h2&gt;
  
  
  Honest notes
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Models are not on-device. Requests go from your phone straight to the provider behind your OpenRouter key.&lt;/li&gt;
&lt;li&gt;No analytics, no telemetry, no bundled keys. Chats, memory and files stay in app storage.&lt;/li&gt;
&lt;li&gt;The current APK is a debug build (Android 9+). A release-signed build is planned.&lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;Free APK and MIT source: &lt;a href="https://github.com/kriddss3/kryzz-ai/releases/tag/v1.1.2" rel="noopener noreferrer"&gt;https://github.com/kriddss3/kryzz-ai/releases/tag/v1.1.2&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I'm genuinely unsure about the default. Is $0.25 per task too low, too high, or should it ask before going over? I'd like to hear where you'd set it.&lt;/p&gt;

</description>
      <category>showdev</category>
      <category>android</category>
      <category>productivity</category>
      <category>ai</category>
    </item>
    <item>
      <title>Why my Android AI app shows its plan before it does anything</title>
      <dc:creator>Grokkris</dc:creator>
      <pubDate>Sat, 17 Oct 2026 08:48:30 +0000</pubDate>
      <link>https://dev.to/grokkris_267433fde5540f5b/why-my-android-ai-app-shows-its-plan-before-it-does-anything-4kmo</link>
      <guid>https://dev.to/grokkris_267433fde5540f5b/why-my-android-ai-app-shows-its-plan-before-it-does-anything-4kmo</guid>
      <description>&lt;p&gt;I've been building Kryzz AI on weekends and evenings for a few months. It's an open-source Android app for chatting with AI models, talking to them by voice, and letting an agent do small multi-step jobs. It's MIT-licensed and the code is on GitHub.&lt;/p&gt;

&lt;p&gt;This post is about one design choice that ended up shaping most of the app: the agent has to show you what it's going to do while it does it.&lt;/p&gt;

&lt;h2&gt;
  
  
  The problem with "magic" agents on a phone
&lt;/h2&gt;

&lt;p&gt;When I tried agent features in other apps, the thing that bothered me most wasn't bad answers. It was not knowing what happened. Did it actually open that page? Did it make up the source? Did it just spend a dollar of my API credit on a loop?&lt;/p&gt;

&lt;p&gt;On a phone that feels worse, because you're usually half paying attention. So I wanted the agent to be boring and visible instead of clever and hidden.&lt;/p&gt;

&lt;h2&gt;
  
  
  What that looks like in v1.1.2
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;A live plan card.&lt;/strong&gt; When you ask for something in Agent Auto, it writes a short plan first and ticks steps off as it goes. If the plan looks wrong you can stop it early.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;A work log.&lt;/strong&gt; Every search, page read and file it touches shows up as a small chip, so you can check where an answer came from.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Only allowed links get fetched.&lt;/strong&gt; Page reads go through a filter instead of following whatever URL the model invents.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Review before send.&lt;/strong&gt; Longer answers get a second pass before they're shown to you.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;A cost cap.&lt;/strong&gt; Default is $0.25 per task, adjustable up to $2, so a runaway loop can't drain your key.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Fast / Balanced / Max.&lt;/strong&gt; One chip to trade speed for quality.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Real files at the end.&lt;/strong&gt; It can hand back a DOCX, XLSX or PDF instead of a wall of text.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Local-first
&lt;/h2&gt;

&lt;p&gt;Chats stay on the device. You bring your own API key for whichever provider you use, and there's no telemetry. I can't promise "nothing ever leaves the phone" because the model call itself goes to your provider, but nothing goes to me.&lt;/p&gt;

&lt;h2&gt;
  
  
  Stack
&lt;/h2&gt;

&lt;p&gt;Kotlin and Jetpack Compose. The file outputs share one Markdown model that gets rendered into DOCX, XLSX or PDF, which kept the export code a lot smaller than I expected.&lt;/p&gt;

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

&lt;p&gt;It's still early. The release is a debug APK, so expect rough edges.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Repo: &lt;a href="https://github.com/kriddss3/kryzz-ai" rel="noopener noreferrer"&gt;https://github.com/kriddss3/kryzz-ai&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;v1.1.2 release (APK): &lt;a href="https://github.com/kriddss3/kryzz-ai/releases/tag/v1.1.2" rel="noopener noreferrer"&gt;https://github.com/kriddss3/kryzz-ai/releases/tag/v1.1.2&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Short demo:&lt;/p&gt;

&lt;p&gt;  &lt;iframe src="https://www.youtube.com/embed/RheYy473mRU" width="710" height="399"&gt;
  &lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;If you've built agent features yourself, I'd like to hear how you handle the "what is it doing right now" problem. Issues and PRs on GitHub are welcome.&lt;/p&gt;

</description>
      <category>android</category>
      <category>opensource</category>
      <category>ai</category>
      <category>kotlin</category>
    </item>
    <item>
      <title>Kryzz AI v1.1 — open-sourcing a local-first Android AI workspace</title>
      <dc:creator>Grokkris</dc:creator>
      <pubDate>Wed, 09 Sep 2026 13:17:06 +0000</pubDate>
      <link>https://dev.to/grokkris_267433fde5540f5b/kryzz-ai-v11-open-sourcing-a-local-first-android-ai-workspace-481a</link>
      <guid>https://dev.to/grokkris_267433fde5540f5b/kryzz-ai-v11-open-sourcing-a-local-first-android-ai-workspace-481a</guid>
      <description>&lt;p&gt;I open-sourced Kryzz AI: a private, local-first Android AI workspace for chat, voice, and tool-driven agents. Affiliation: I built this. MIT. The GitHub release includes a &lt;strong&gt;debug APK&lt;/strong&gt; for sideloading (Android 9+), not a Play Store build.&lt;/p&gt;

&lt;p&gt;  &lt;iframe src="https://www.youtube.com/embed/RheYy473mRU" width="710" height="399"&gt;
  &lt;/iframe&gt;
&lt;/p&gt;

&lt;h2&gt;
  
  
  Update: v1.1.2 (Agent Auto)
&lt;/h2&gt;

&lt;p&gt;Agent Auto now keeps a &lt;strong&gt;live plan&lt;/strong&gt; through the turn, reviews substantial answers before send, and writes finished &lt;strong&gt;DOCX / XLSX / PDF&lt;/strong&gt;. Fast / Balanced / Max on the composer, a work log with search/page/file chips, safer &lt;code&gt;fetch_url&lt;/code&gt;, and a per-turn cost cap (default $0.25).&lt;/p&gt;

&lt;p&gt;Still local-first: BYO keys, Keystore, no telemetry. MIT. Debug APK (internal 5.11.0): &lt;a href="https://github.com/kriddss3/kryzz-ai/releases/tag/v1.1.2" rel="noopener noreferrer"&gt;https://github.com/kriddss3/kryzz-ai/releases/tag/v1.1.2&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Why
&lt;/h2&gt;

&lt;p&gt;A lot of AI apps are thin clients to someone else’s cloud, with telemetry baked in. I wanted the control plane on my phone — storage, memory, skills, voice — with BYO provider keys.&lt;/p&gt;

&lt;h2&gt;
  
  
  Stack
&lt;/h2&gt;

&lt;p&gt;Kotlin, Jetpack Compose (Material 3), Room, DataStore, OkHttp. Credentials use AES-GCM under Android Keystore. No bundled keys, no analytics, no HTTP logging of chats.&lt;/p&gt;

&lt;h2&gt;
  
  
  What’s new in v1.1
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;MiniMax as another chat/agent/media provider next to OpenRouter&lt;/li&gt;
&lt;li&gt;Agent Auto: multi-step tool loop (search, fetch_url, calculate, weather, memory, reminders, PDF/code zips, ask_user)&lt;/li&gt;
&lt;li&gt;Question cards in Chat and Agent&lt;/li&gt;
&lt;li&gt;Starter skills on first launch&lt;/li&gt;
&lt;li&gt;KryzzBot mascot, 120 Hz support, more reliable side panel&lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;Source + debug APK: &lt;a href="https://github.com/kriddss3/kryzz-ai/releases/tag/v1.1" rel="noopener noreferrer"&gt;https://github.com/kriddss3/kryzz-ai/releases/tag/v1.1&lt;/a&gt;&lt;br&gt;
Feedback welcome, especially on the agent tool loop and first-run UX.&lt;/p&gt;

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