<?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: Leandro</title>
    <description>The latest articles on DEV Community by Leandro (@argenkiwi).</description>
    <link>https://dev.to/argenkiwi</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%2F2966701%2F6f856850-20c7-4d34-8135-8f21c0704848.jpeg</url>
      <title>DEV Community: Leandro</title>
      <link>https://dev.to/argenkiwi</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/argenkiwi"/>
    <language>en</language>
    <item>
      <title>Zettelkasten as a note-taking method for AI agents</title>
      <dc:creator>Leandro</dc:creator>
      <pubDate>Mon, 06 Jul 2026 18:10:44 +0000</pubDate>
      <link>https://dev.to/argenkiwi/zettelkasten-as-a-note-taking-method-for-coding-agents-53gb</link>
      <guid>https://dev.to/argenkiwi/zettelkasten-as-a-note-taking-method-for-coding-agents-53gb</guid>
      <description>&lt;p&gt;I wanted to give &lt;a href="https://github.com/argenkiwi/ambler-ts" rel="noopener noreferrer"&gt;AmblerTS&lt;/a&gt;, my Deno/TypeScript state-machine framework, the ability to record non-obvious learnings that would otherwise require significant context to reconstruct across sessions.&lt;/p&gt;

&lt;p&gt;I turned to the classic note-taking methodology developed by the German sociologist &lt;a href="https://en.wikipedia.org/wiki/Niklas_Luhmann" rel="noopener noreferrer"&gt;Niklas Luhmann&lt;/a&gt;: the &lt;a href="https://en.wikipedia.org/wiki/Zettelkasten" rel="noopener noreferrer"&gt;Zettelkasten&lt;/a&gt; (German for slip box). The methodology is elegantly simple: take atomic notes, link them explicitly to related ones, and organise them so they can be retrieved precisely when they become relevant again.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Concept
&lt;/h3&gt;

&lt;p&gt;The idea translates naturally to agentic coding:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Describe the protocol in an &lt;code&gt;AGENTS.md&lt;/code&gt; file, a convention that coding agents like &lt;a href="https://ai.google.dev/gemini-api" rel="noopener noreferrer"&gt;Gemini&lt;/a&gt; and &lt;a href="https://www.anthropic.com/claude" rel="noopener noreferrer"&gt;Claude&lt;/a&gt; read as project-level instructions.&lt;/li&gt;
&lt;li&gt;Implement a lightweight abstraction using AmblerTS itself, a unified &lt;code&gt;azk&lt;/code&gt; walk that supports the full set of operations: &lt;code&gt;search&lt;/code&gt;, &lt;code&gt;create&lt;/code&gt;, &lt;code&gt;get&lt;/code&gt;, &lt;code&gt;update&lt;/code&gt;, &lt;code&gt;link&lt;/code&gt; and &lt;code&gt;delete&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;The agent searches for relevant notes before working on a prompt, then feeds any new learnings back into the slip box when done.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The result is a notes folder with Markdown files for notes and a local, git-ignored &lt;a href="https://www.sqlite.org/" rel="noopener noreferrer"&gt;SQLite&lt;/a&gt; database that accumulate project-specific metadata (design decisions, gotchas, constraints) accessible to any coding agent that works on the repository. Search blends &lt;a href="https://www.sqlite.org/fts5.html" rel="noopener noreferrer"&gt;FTS5&lt;/a&gt; keyword matching with optional semantic re-ranking via embeddings (degrading gracefully to keyword-only when no local embeddings host is available).&lt;/p&gt;

&lt;h3&gt;
  
  
  Current Implementation
&lt;/h3&gt;

&lt;p&gt;The implementation is intentionally minimal, enough to validate the idea. A single &lt;code&gt;deno task azk &amp;lt;subcommand&amp;gt;&lt;/code&gt; command exposes all six operations:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;deno task azk search &lt;span class="s2"&gt;"&amp;lt;query&amp;gt;"&lt;/span&gt;
&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s1"&gt;'{"title":"...","body":"...","tags":["..."]}'&lt;/span&gt; | deno task zettel create
deno task azk get &amp;lt;&lt;span class="nb"&gt;id&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s1"&gt;'{"body":"..."}'&lt;/span&gt; | deno task zettel update &amp;lt;&lt;span class="nb"&gt;id&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
deno task azk delete &amp;lt;&lt;span class="nb"&gt;id&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
deno task azk &lt;span class="nb"&gt;link&lt;/span&gt; &amp;lt;fromId&amp;gt; &amp;lt;toId&amp;gt; &lt;span class="s2"&gt;"&amp;lt;relation&amp;gt;"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  What's Next
&lt;/h3&gt;

&lt;p&gt;A few variants I have in mind:&lt;/p&gt;

&lt;p&gt;• User-level note store: a single knowledge base spanning all coding agent activity across projects, backed by a user-level &lt;code&gt;AGENTS.md&lt;/code&gt;  and a shared command, rather than one database per repository.&lt;br&gt;
• Hybrid Markdown + SQLite storage, keeping notes as version-controlled Markdown files with SQLite used purely as a search index. Whether that adds value likely depends on the development process: projects with meaningful git history and code review may benefit from diffable notes; others probably won't.&lt;/p&gt;

&lt;p&gt;──────&lt;/p&gt;

&lt;p&gt;AmblerTS is open source. You can explore the implementation and try the Zettelkasten-RAG setup at &lt;a href="https://github.com/argenkiwi/ambler-ts" rel="noopener noreferrer"&gt;https://github.com/argenkiwi/ambler-ts&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>agents</category>
      <category>rag</category>
      <category>automation</category>
    </item>
    <item>
      <title>From ANSI to Ergo: Remapping the Transition</title>
      <dc:creator>Leandro</dc:creator>
      <pubDate>Fri, 26 Jun 2026 19:09:16 +0000</pubDate>
      <link>https://dev.to/argenkiwi/from-ansi-to-ergo-remapping-the-transition-3bd5</link>
      <guid>https://dev.to/argenkiwi/from-ansi-to-ergo-remapping-the-transition-3bd5</guid>
      <description>&lt;p&gt;A common story in the mechanical keyboard community goes like this: someone starts suffering from repetitive strain injury (RSI) or general hand pain and decides to transition to an ergonomic keyboard. To make the transition easier, they look for a large layout with plenty of keys. However, once the keyboard arrives, they realize the learning curve is steep. Frustrated, they ask for help in forums, convince themselves they bought the wrong board, and buy another one. Those who don't quit often end up with an expensive collection of ornamental keyboards.&lt;/p&gt;

&lt;p&gt;I wanted to avoid this trap. Instead of buying a series of physical keyboards until I found the one, I learned what features my ideal keyboard should have. I settled on the following: a 34-key, column-staggered, split ergonomic keyboard layout. &lt;/p&gt;

&lt;p&gt;Next, I needed to find a way to reduce the number of keys I was using on my ANSI keyboard to 34 or less by:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Identifying which keys were truly redundant or unnecessary.&lt;/li&gt;
&lt;li&gt;Efficiently mapping the remaining keys using a layered system.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;But didn't I need a programmable keyboard for that?&lt;/p&gt;

&lt;h3&gt;
  
  
  Bridging the Gap in Software
&lt;/h3&gt;

&lt;p&gt;That’s when I discovered &lt;a href="https://github.com/kmonad/kmonad" rel="noopener noreferrer"&gt;KMonad&lt;/a&gt;: a powerful tool that allows you to reprogram any keyboard at the software/OS level. This enabled me to test and refine a 34-key layout directly on my standard ANSI keyboard before purchasing any ergonomic hardware.&lt;/p&gt;

&lt;h3&gt;
  
  
  Introducing Kenkyo (謙虚)
&lt;/h3&gt;

&lt;p&gt;Through this software-first approach, I open-sourced my custom layout under the name &lt;a href="https://github.com/argenkiwi/kenkyo" rel="noopener noreferrer"&gt;Kenkyo&lt;/a&gt; (which means &lt;em&gt;humility&lt;/em&gt; in Japanese). I chose this name as a contrast to the dominant &lt;a href="https://github.com/manna-harbour/miryoku" rel="noopener noreferrer"&gt;Miryoku&lt;/a&gt; (&lt;em&gt;allure&lt;/em&gt; in Japanese) layout. &lt;/p&gt;

&lt;p&gt;While Miryoku is highly custom and fully featured, Kenkyo aims to be a simple, non-disruptive, software-driven bridge that allows standard ANSI keyboard users to gradually transition to a layered 34-key workflow.&lt;/p&gt;

&lt;p&gt;Over time, I migrated my setup to more modern and lightweight alternatives:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://github.com/rvaiya/keyd" rel="noopener noreferrer"&gt;keyd&lt;/a&gt;: A highly efficient keyboard remapping daemon for Linux.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/jtroo/kanata" rel="noopener noreferrer"&gt;Kanata&lt;/a&gt;: A cross-platform remapper focused on advanced features like tap-hold, home row mods, and custom combos.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;By remapping the keyboard in software first, I was able to build muscle memory. By the time I received my first ergonomic keyboard I could be productive with it right away. To this day, I still use software for my layout, which allows me to switch between my ergo and laptop keyboards painlessly.&lt;/p&gt;

</description>
      <category>tooling</category>
      <category>productivity</category>
    </item>
    <item>
      <title>The age of forks</title>
      <dc:creator>Leandro</dc:creator>
      <pubDate>Wed, 10 Jun 2026 18:58:15 +0000</pubDate>
      <link>https://dev.to/argenkiwi/the-age-of-forks-ko8</link>
      <guid>https://dev.to/argenkiwi/the-age-of-forks-ko8</guid>
      <description>&lt;p&gt;It has become relatively cheap now to take an existing open source project with a permissive license, fork it and tailor it to your needs. At the same time, the internet is saturated with new projects generated with coding agents and our attention span cannot grow.&lt;/p&gt;

&lt;p&gt;I am sure I am not alone having the following experience: there is an open source project I love, but it is missing one or 2 features that should be straight forward to implement. I create feature requests, but the author has no time to even look into them or deems them as the wrong fit or direction for the project. I create a minimal pull request with the aid of a coding agent, as I am not versed on the programming language used for the project, but the PR stays on with no signs of being reviewed anytime soon and will likely be rejected due to the use of AI. Of course, the easiest thing to do now is to simply use the fork of the project I put together for the pull-request.&lt;/p&gt;

&lt;p&gt;But why stop there? Now I have added MacOS support for a C application that was targeting Linux exclusively and I am even porting it to Rust just so I can learn the language while I iterate over it. I tried sharing the initiative with others, but there is too much noise for anyone to pay attention. How many forests will be burnt so we can reinvent the wheel over and over? I am honestly not sure of how to feel about the direction in which software engineering is going. So many conflicting feelings. &lt;/p&gt;

</description>
      <category>github</category>
      <category>ai</category>
      <category>programming</category>
      <category>productivity</category>
    </item>
    <item>
      <title>Home-Bottom Row Modifier Clusters</title>
      <dc:creator>Leandro</dc:creator>
      <pubDate>Sat, 30 May 2026 20:29:46 +0000</pubDate>
      <link>https://dev.to/argenkiwi/home-bottom-row-modifier-clusters-590n</link>
      <guid>https://dev.to/argenkiwi/home-bottom-row-modifier-clusters-590n</guid>
      <description>&lt;p&gt;In the world of custom keyboard layouts, one of the biggest challenges is balancing accessibility with speed. The traditional ANSI layout forces your pinkies and thumbs to reach for distant modifier keys like &lt;code&gt;Ctrl&lt;/code&gt;, &lt;code&gt;Alt&lt;/code&gt;, and &lt;code&gt;Shift&lt;/code&gt;. While "Home Row Modifiers" (HRM) have long been a popular solution, the &lt;a href="https://github.com/argenkiwi/kenkyo" rel="noopener noreferrer"&gt;Kenkyo&lt;/a&gt; &lt;br&gt;
layout takes this a step further with &lt;strong&gt;Home-Bottom Row Modifier Clusters&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;This post explains how we use &lt;a href="https://github.com/jtroo/kanata" rel="noopener noreferrer"&gt;Kanata&lt;/a&gt; to turn the home and bottom rows of a standard keyboard into a high-performance modifier engine.&lt;/p&gt;
&lt;h2&gt;
  
  
  The Concept: Overloading the Letters
&lt;/h2&gt;

&lt;p&gt;At its core, Kenkyo uses &lt;strong&gt;modifier overloads&lt;/strong&gt; on standard letter keys. Instead of reaching for a physical &lt;code&gt;Shift&lt;/code&gt; key, you simply hold a letter on your home row.&lt;/p&gt;

&lt;p&gt;In our &lt;code&gt;kanata.kbd&lt;/code&gt;, we use a template called &lt;code&gt;charmod&lt;/code&gt;. This leverages Kanata's &lt;code&gt;tap-hold-release-timeout&lt;/code&gt; logic, but with a special twist we call &lt;code&gt;flowtap&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight common_lisp"&gt;&lt;code&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;deftemplate&lt;/span&gt; &lt;span class="nv"&gt;flowtap&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;flow&lt;/span&gt; &lt;span class="nv"&gt;tap&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;switch&lt;/span&gt; 
    &lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nv"&gt;key-timing&lt;/span&gt; &lt;span class="nv"&gt;$streak-count&lt;/span&gt; &lt;span class="nv"&gt;less-than&lt;/span&gt; &lt;span class="nv"&gt;$streak-time&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt; &lt;span class="nv"&gt;$flow&lt;/span&gt; &lt;span class="nb"&gt;break&lt;/span&gt;
    &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="nv"&gt;$tap&lt;/span&gt; &lt;span class="nb"&gt;break&lt;/span&gt;
  &lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The &lt;code&gt;flowtap&lt;/code&gt; logic detects if you are in a "typing streak." If you are typing fast, the keys behave as normal letters to prevent accidental modifier "misfires." If you pause or type a single key, the hold-to-modify behavior is activated.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Clusters: Home and Bottom Row Synergy
&lt;/h2&gt;

&lt;p&gt;While standard HRM puts modifiers on &lt;code&gt;A S D F&lt;/code&gt; and &lt;code&gt;J K L ;&lt;/code&gt;, Kenkyo clusters them across the home and bottom rows to reduce finger strain and enable advanced combinations.&lt;/p&gt;

&lt;h3&gt;
  
  
  Left Hand Cluster (&lt;code&gt;mhbl&lt;/code&gt;)
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Home Row:&lt;/strong&gt; &lt;code&gt;s&lt;/code&gt; (Alt), &lt;code&gt;d&lt;/code&gt; (Shift), &lt;code&gt;f&lt;/code&gt; (Ctrl)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Bottom Row:&lt;/strong&gt; &lt;code&gt;x&lt;/code&gt; (AltGr/RAlt), &lt;code&gt;v&lt;/code&gt; (Fumbol Layer)&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Right Hand Cluster (&lt;code&gt;mhbr&lt;/code&gt;)
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Home Row:&lt;/strong&gt; &lt;code&gt;j&lt;/code&gt; (Ctrl), &lt;code&gt;k&lt;/code&gt; (Shift), &lt;code&gt;l&lt;/code&gt; (Alt)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Bottom Row:&lt;/strong&gt; &lt;code&gt;m&lt;/code&gt; (Fumbol Layer), &lt;code&gt;.&lt;/code&gt; (AltGr/RAlt)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;By involving the bottom row, we create "clusters" where your fingers can easily rock between a standard modifier (like &lt;code&gt;Shift&lt;/code&gt;) and a layer toggle (like &lt;code&gt;Fumbol&lt;/code&gt;).&lt;/p&gt;

&lt;h2&gt;
  
  
  Replacing Physical Keys
&lt;/h2&gt;

&lt;p&gt;On a standard ANSI keyboard, a combination like &lt;code&gt;Ctrl + Shift + T&lt;/code&gt; requires awkward contortions. In Kenkyo, this is achieved by holding &lt;code&gt;f&lt;/code&gt; (Ctrl) and &lt;code&gt;d&lt;/code&gt; (Shift) with your left hand, and tapping &lt;code&gt;t&lt;/code&gt;. Your hands never leave the home position.&lt;/p&gt;

&lt;p&gt;We even use &lt;strong&gt;Chords&lt;/strong&gt; (pressing two keys simultaneously) to trigger common actions:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;w + e&lt;/code&gt; = &lt;code&gt;Esc&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;i + o&lt;/code&gt; = &lt;code&gt;Backspace&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;j + k&lt;/code&gt; = &lt;code&gt;Enter&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The One-Shot Advantage: Typing at Speed
&lt;/h2&gt;

&lt;p&gt;One of the most powerful features of the Kenkyo clusters is the use of &lt;strong&gt;One-Shot Modifiers&lt;/strong&gt;. &lt;/p&gt;

&lt;p&gt;A One-Shot modifier (or "sticky key") stays active only for the &lt;em&gt;next&lt;/em&gt; keypress. In Kenkyo, we trigger these using chords within our clusters:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;d + k&lt;/code&gt; (simultaneous tap) = &lt;strong&gt;One-Shot Shift&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;x + .&lt;/code&gt; = &lt;strong&gt;One-Shot AltGr&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;v + m&lt;/code&gt; = &lt;strong&gt;One-Shot Fumbol Layer&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Why One-Shots?
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Maintain Rhythm:&lt;/strong&gt; When typing at speed, holding a key down breaks your "tapping" rhythm. One-shots allow you to treat modifiers as just another tap in the sequence.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Reduced Fatigue:&lt;/strong&gt; You don't have to maintain tension on a key while reaching for another.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Misfire Prevention:&lt;/strong&gt; Since the modifier is only active for one key, you don't accidentally "hold" it into the next word.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Advanced Multi-Mod Chords
&lt;/h2&gt;

&lt;p&gt;For power users, clusters allow for complex multi-modifier one-shots that would be nearly impossible on a standard layout. For example, in Kenkyo:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;x + d&lt;/code&gt; = &lt;strong&gt;One-Shot AltGr + Shift&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;x + d + v&lt;/code&gt; = &lt;strong&gt;One-Shot AltGr + Shift + Fumbol Layer&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This allows you to access deep symbols in the &lt;code&gt;Fumbol&lt;/code&gt; layer with a single, coordinated "pinch" or "swipe" of the fingers, keeping your typing fluid and your hands relaxed.&lt;/p&gt;




&lt;p&gt;The Home-Bottom Row Modifier Cluster isn't just about saving space—it's about re-imagining the keyboard as a tool where every key is exactly where you need it to be, exactly when you need it.&lt;/p&gt;

</description>
      <category>typing</category>
      <category>keyboards</category>
    </item>
    <item>
      <title>Porting existing code to Ambler TS</title>
      <dc:creator>Leandro</dc:creator>
      <pubDate>Tue, 19 May 2026 19:39:19 +0000</pubDate>
      <link>https://dev.to/argenkiwi/porting-from-pocketflow-to-ambler-ts-2gf5</link>
      <guid>https://dev.to/argenkiwi/porting-from-pocketflow-to-ambler-ts-2gf5</guid>
      <description>&lt;p&gt;The quickest way to port code from a Git repository into Ambler TS is to include it as a Git submodule and leverage Ambler's agentic skills. We'll use the &lt;a href="https://github.com/The-Pocket/PocketFlow" rel="noopener noreferrer"&gt;PocketFlow cookbook&lt;/a&gt; as an example.&lt;/p&gt;

&lt;h3&gt;
  
  
  Project Setup
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Create a project folder&lt;/li&gt;
&lt;li&gt;Initialize git&lt;/li&gt;
&lt;li&gt;Add PocketFlow (or a Git repository of your choosing) as a submodule.&lt;/li&gt;
&lt;li&gt;Install the Ambler TS skills
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;mkdir &lt;/span&gt;port
&lt;span class="nb"&gt;cd &lt;/span&gt;port
git init
git submodule add https://github.com/The-Pocket/PocketFlow.git
npx skills add argenkiwi/ambler-ts
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Initialize Ambler
&lt;/h3&gt;

&lt;p&gt;Use a coding agent (like Claude or Pi) and invoke the &lt;code&gt;ambler-walk&lt;/code&gt; skill:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/ambler-init .
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Port Code
&lt;/h3&gt;

&lt;p&gt;Invoke the &lt;code&gt;ambler-walk&lt;/code&gt; skill and provide the path to what you want to port:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/ambler-walk create chat walk from @PocketFlow/cookbook/pocketflow-chat
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The agent will automatically:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Analyze the source logic.&lt;/li&gt;
&lt;li&gt;Create the necessary &lt;strong&gt;Nodes&lt;/strong&gt; in &lt;code&gt;nodes/&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Scaffold a &lt;strong&gt;Spec&lt;/strong&gt; in &lt;code&gt;specs/&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Wire everything into a &lt;strong&gt;Walk&lt;/strong&gt; in &lt;code&gt;walks/&lt;/code&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Test Run
&lt;/h3&gt;

&lt;p&gt;Once the agent finishes, verify the port:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;deno &lt;span class="nb"&gt;test &lt;/span&gt;nodes/tests/
deno task &amp;lt;walk-name&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



</description>
      <category>pocketflow</category>
      <category>amblerts</category>
      <category>agentskills</category>
      <category>typescript</category>
    </item>
    <item>
      <title>I hope the next generations of gaming consoles are designed to also be your household's LLM hosts so you can use the GPU and unified memory for something useful during work hours.</title>
      <dc:creator>Leandro</dc:creator>
      <pubDate>Tue, 19 May 2026 16:37:27 +0000</pubDate>
      <link>https://dev.to/argenkiwi/i-hope-the-next-generations-of-gaming-consoles-are-designed-to-also-be-your-households-llm-hosts-5ha</link>
      <guid>https://dev.to/argenkiwi/i-hope-the-next-generations-of-gaming-consoles-are-designed-to-also-be-your-households-llm-hosts-5ha</guid>
      <description></description>
      <category>ai</category>
      <category>discuss</category>
      <category>llm</category>
      <category>productivity</category>
    </item>
    <item>
      <title>You can use lteter tiiartnosopsn also kownn as tygmioaypcle, to make the lives of AI agents hrad.</title>
      <dc:creator>Leandro</dc:creator>
      <pubDate>Thu, 07 May 2026 23:06:35 +0000</pubDate>
      <link>https://dev.to/argenkiwi/you-can-use-lteter-tiiartnosopsn-also-kownn-as-tygmioaypcle-to-make-the-lives-of-ai-agents-hrad-27lf</link>
      <guid>https://dev.to/argenkiwi/you-can-use-lteter-tiiartnosopsn-also-kownn-as-tygmioaypcle-to-make-the-lives-of-ai-agents-hrad-27lf</guid>
      <description></description>
      <category>agents</category>
      <category>ai</category>
      <category>nlp</category>
      <category>security</category>
    </item>
    <item>
      <title>One of the selling points of open source software has always been that you could look at the code and make sure it does what is says it does. But then who could be bothered to read the source code to verify it was legit. Agents can do it for you now.</title>
      <dc:creator>Leandro</dc:creator>
      <pubDate>Wed, 06 May 2026 22:29:32 +0000</pubDate>
      <link>https://dev.to/argenkiwi/one-of-the-selling-points-of-open-source-software-has-always-been-that-you-could-look-at-the-code-17ag</link>
      <guid>https://dev.to/argenkiwi/one-of-the-selling-points-of-open-source-software-has-always-been-that-you-could-look-at-the-code-17ag</guid>
      <description></description>
      <category>agents</category>
      <category>ai</category>
      <category>opensource</category>
      <category>security</category>
    </item>
    <item>
      <title>Ambler TS: a minimal state-machine builder driven by agent skills</title>
      <dc:creator>Leandro</dc:creator>
      <pubDate>Mon, 04 May 2026 04:41:31 +0000</pubDate>
      <link>https://dev.to/argenkiwi/ambler-ts-a-minimal-state-machine-builder-driven-by-agent-skills-3pkf</link>
      <guid>https://dev.to/argenkiwi/ambler-ts-a-minimal-state-machine-builder-driven-by-agent-skills-3pkf</guid>
      <description>&lt;p&gt;Simply install the relevant skills into an empty folder, as explained in the &lt;a href="https://github.com/argenkiwi/ambler-ts" rel="noopener noreferrer"&gt;GitHub repo&lt;/a&gt;, and describe you program (walk) to your coding agent, detailing its steps (nodes) and how they connect with each other (edges). Ambler TS' skills will help the agent write specs, code and tests for your project in a predictable and modular manner. You can easily run it using &lt;a href="https://deno.com/" rel="noopener noreferrer"&gt;Deno&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;I have been testing the library using local LLMs within the &lt;a href="https://pi.dev/" rel="noopener noreferrer"&gt;Pi Coding Agent&lt;/a&gt;. It is great for replacing automation scripts and playing with agentic workflow ideas.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>agents</category>
      <category>tooling</category>
      <category>typescript</category>
    </item>
    <item>
      <title>Convention over configuration reaches a new level with agent skills. I built a tiny workflow orchestrator (ambler-ts, 52 lines of TypeScript with docs). But it is the skills that enforce the patterns used to write simple, readable and maintainable code.</title>
      <dc:creator>Leandro</dc:creator>
      <pubDate>Thu, 30 Apr 2026 22:17:23 +0000</pubDate>
      <link>https://dev.to/argenkiwi/convention-over-configuration-reaches-a-new-level-with-agent-skills-i-built-a-tiny-workflow-46j8</link>
      <guid>https://dev.to/argenkiwi/convention-over-configuration-reaches-a-new-level-with-agent-skills-i-built-a-tiny-workflow-46j8</guid>
      <description></description>
      <category>agents</category>
      <category>ai</category>
      <category>showdev</category>
      <category>typescript</category>
    </item>
    <item>
      <title>I have been experimenting with agent skills for software design patterns and the results have been very positive so far. 

I put together an Android (arch26) and Deno (ambler.ts) projects and the results are predictable while tests are written by default.</title>
      <dc:creator>Leandro</dc:creator>
      <pubDate>Fri, 17 Apr 2026 16:12:33 +0000</pubDate>
      <link>https://dev.to/argenkiwi/i-have-been-experimenting-with-agent-skills-for-software-design-patterns-and-the-results-have-been-j72</link>
      <guid>https://dev.to/argenkiwi/i-have-been-experimenting-with-agent-skills-for-software-design-patterns-and-the-results-have-been-j72</guid>
      <description></description>
    </item>
    <item>
      <title>Ambler: rules of engagement with coding agents</title>
      <dc:creator>Leandro</dc:creator>
      <pubDate>Thu, 31 Jul 2025 21:58:22 +0000</pubDate>
      <link>https://dev.to/argenkiwi/ambler-rules-of-engagement-with-coding-agents-194j</link>
      <guid>https://dev.to/argenkiwi/ambler-rules-of-engagement-with-coding-agents-194j</guid>
      <description>&lt;p&gt;I recently came across an interesting project called &lt;a href="https://github.com/The-Pocket/PocketFlow" rel="noopener noreferrer"&gt;PocketFlow&lt;/a&gt;, which presents a minimalistic approach to building workflows that incorporate large language models. It is originally written in Python, a language I have never really used, so I attempted to port it to Kotlin to better understand how it works. As I progressed it became clear the project was simply a glorified state machine and it could be simplified even further. The result was &lt;a href="https://github.com/argenkiwi/ambler" rel="noopener noreferrer"&gt;Ambler&lt;/a&gt;: a very simple function and a very simple class definition that allow you to express a program as a series of steps that update the current state and pass it on to the next step. &lt;/p&gt;

&lt;p&gt;Nothing groundbreaking, but  the power of this simplicity is that you can describe your application logically in plain English in a markdown document and then ask a coding agent to build it for you, while keeping the application structure consistent, predictable and easy to understand.&lt;/p&gt;

&lt;p&gt;I decided to build a simple counter application as the first example. By not specifying the programming language, Gemini CLI tended to gravitate to using Python. I went along and refined the approach until I got exactly what I wanted. By the end of it I also obtained an equivalent implementation of the Ambler code and the sample in Go, JavaScript, Kotlin, Ruby, Rust and Typescript. &lt;/p&gt;

&lt;p&gt;I have observed something interesting when looking into the project on GitHub: the percentage of the codebase written in each language varies considerably for an equivalent implementation. It makes me wonder what the long term impact of using a less verbose, more concise programming language has on your agentic coding costs, assuming there will be a direct correlation between the amount of code needed to solve a problem and the number of tokens used.&lt;/p&gt;

&lt;p&gt;I'll continue experimenting with this approach, but I can already see how useful it will become when needing to automate simple tasks. Gemini CLI has already made me a handy &lt;a href="https://github.com/argenkiwi/ambler-m3u-downloader" rel="noopener noreferrer"&gt;application&lt;/a&gt; to download URLs from an m3u file which is a great companion to an &lt;a href="https://github.com/argenkiwi/audini" rel="noopener noreferrer"&gt;Chrome Extension&lt;/a&gt; Gemini CLI built for me a while ago. All I need now is more ideas to test the approach with.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>coding</category>
      <category>agents</category>
    </item>
  </channel>
</rss>
