<?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>Keyboard Remapping on Steroids: keyd vs. kanata vs. keydo</title>
      <dc:creator>Leandro</dc:creator>
      <pubDate>Tue, 11 Aug 2026 18:28:54 +0000</pubDate>
      <link>https://dev.to/argenkiwi/keyboard-remapping-on-steroids-keyd-vs-kanata-vs-keydo-501e</link>
      <guid>https://dev.to/argenkiwi/keyboard-remapping-on-steroids-keyd-vs-kanata-vs-keydo-501e</guid>
      <description>&lt;p&gt;If you have ever attempted to implement &lt;strong&gt;Home Row Mods&lt;/strong&gt;, create navigation layers, or customise tap-hold behaviours on a standard laptop keyboard without buying a $300 QMK/ZMK programmable split ergonomic keyboard, you know the struggle.&lt;/p&gt;

&lt;p&gt;Standard OS-level tools like &lt;code&gt;xmodmap&lt;/code&gt;, &lt;code&gt;autohotkey&lt;/code&gt;, or basic macOS modifiers often fall short when handling complex layered interactions, sub-millisecond tap-hold detection, or display server transitions (like moving between X11 and Wayland).&lt;/p&gt;

&lt;p&gt;Enter software-based daemon remappers. Three of the most prominent tools in this ecosystem are:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://github.com/rvaiya/keyd" rel="noopener noreferrer"&gt;rvaiya/keyd&lt;/a&gt;&lt;/strong&gt; — The C-based Linux kernel daemon benchmark.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://github.com/jtroo/kanata" rel="noopener noreferrer"&gt;jtroo/kanata&lt;/a&gt;&lt;/strong&gt; — The cross-platform Rust powerhouse.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://github.com/argenkiwi/keydo" rel="noopener noreferrer"&gt;argenkiwi/keydo&lt;/a&gt;&lt;/strong&gt; — The Rust-based "keyd, oxidised" alternative bridging ergonomic syntax and multi-platform goals.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;In this article, we’ll break down how they compare across architecture, configuration syntax, cross-platform support, and unique capabilities so you can choose the right tool for your setup.&lt;/p&gt;




&lt;h2&gt;
  
  
  High-Level Overview
&lt;/h2&gt;

&lt;p&gt;Here is a bird's-eye comparison of the three projects:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Feature / Aspect&lt;/th&gt;
&lt;th&gt;
&lt;strong&gt;keyd&lt;/strong&gt; (&lt;code&gt;rvaiya/keyd&lt;/code&gt;)&lt;/th&gt;
&lt;th&gt;
&lt;strong&gt;kanata&lt;/strong&gt; (&lt;code&gt;jtroo/kanata&lt;/code&gt;)&lt;/th&gt;
&lt;th&gt;
&lt;strong&gt;keydo&lt;/strong&gt; (&lt;code&gt;argenkiwi/keydo&lt;/code&gt;)&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Language&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;C&lt;/td&gt;
&lt;td&gt;Rust&lt;/td&gt;
&lt;td&gt;Rust&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Primary Platform&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Linux (Kernel level: evdev/uinput)&lt;/td&gt;
&lt;td&gt;Cross-Platform (Linux, macOS, Windows)&lt;/td&gt;
&lt;td&gt;Multi-Platform Vision (Linux, macOS)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Configuration Style&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;INI / Declarative (&lt;code&gt;/etc/keyd/&lt;/code&gt;)&lt;/td&gt;
&lt;td&gt;Lisp / S-expressions (&lt;code&gt;.kbd&lt;/code&gt;)&lt;/td&gt;
&lt;td&gt;INI / Keyd-inspired Syntax&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Philosophy&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Minimalist, UNIX-way, sub-1ms speed&lt;/td&gt;
&lt;td&gt;Feature-maximalist, highly customizable&lt;/td&gt;
&lt;td&gt;Clean INI simplicity + Rust safety/portability&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Live Reloading&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Yes (&lt;code&gt;keyd reload&lt;/code&gt;)&lt;/td&gt;
&lt;td&gt;Yes (automatic file watch)&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Application Remapping&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Native IPC / app-specific bindings&lt;/td&gt;
&lt;td&gt;External integration via TCP / scripts&lt;/td&gt;
&lt;td&gt;In development&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Complexity Curve&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Very low (easy to learn in 5 mins)&lt;/td&gt;
&lt;td&gt;Moderate to high (steep initial syntax)&lt;/td&gt;
&lt;td&gt;Low (intuitive keyd-style syntax)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  1. keyd (&lt;code&gt;rvaiya/keyd&lt;/code&gt;) — The Linux Benchmark
&lt;/h2&gt;

&lt;h3&gt;
  
  
  What is it?
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://github.com/rvaiya/keyd" rel="noopener noreferrer"&gt;keyd&lt;/a&gt; is a system-wide key remapping daemon for Linux written in C. It operates at the kernel level via &lt;code&gt;evdev&lt;/code&gt; and &lt;code&gt;uinput&lt;/code&gt;. Because it hooks into Linux's input subsystem below the display server layer, your custom keybindings work identically across X11, Wayland compositors (Sway, Hyprland, GNOME), and even pure virtual consoles (TTYs).&lt;/p&gt;

&lt;h3&gt;
  
  
  Key Strengths
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Unbeatable Performance &amp;amp; Low Overhead:&lt;/strong&gt; Hand-tuned C loop executing input transformations in under 1 millisecond with near-zero memory footprint.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Intuitive INI Configuration:&lt;/strong&gt; The syntax is dead simple. Creating a navigation layer or overloading Caps Lock takes seconds.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;First-Class Modifiers &amp;amp; Composite Layers:&lt;/strong&gt; Supports syntax like &lt;code&gt;[control+alt]&lt;/code&gt; or modifier-blended layers out of the box without complex boilerplate.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Application-Aware Remapping:&lt;/strong&gt; Ships with an IPC client mechanism allowing context-sensitive layers dependent on the focused window (e.g., terminal vs. browser).&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Drawbacks
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Linux Only:&lt;/strong&gt; Deeply tied to Linux kernel primitives (&lt;code&gt;/dev/input/evdev&lt;/code&gt;, &lt;code&gt;/dev/uinput&lt;/code&gt;). It cannot run natively on macOS or Windows.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  2. kanata (&lt;code&gt;jtroo/kanata&lt;/code&gt;) — The Cross-Platform Powerhouse
&lt;/h2&gt;

&lt;h3&gt;
  
  
  What is it?
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://github.com/jtroo/kanata" rel="noopener noreferrer"&gt;kanata&lt;/a&gt; is a cross-platform keyboard remapper written in Rust. Born out of the desire to bring advanced QMK/Kinesis-style firmware logic to software remappers, Kanata runs seamlessly on &lt;strong&gt;Linux, macOS, and Windows&lt;/strong&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Key Strengths
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;True Cross-Platform Consistency:&lt;/strong&gt; Use the exact same core remapping logic and Home Row Mod timings whether you are on your Linux workstation, MacBook, or Windows gaming rig.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Granular Tap-Hold Customization:&lt;/strong&gt; Offers fine-grained primitives like &lt;code&gt;tap-hold-press&lt;/code&gt;, &lt;code&gt;tap-hold-release&lt;/code&gt;, chord groups, leader key sequences, and Unicode output macros.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Extensibility &amp;amp; Interprocess Communication:&lt;/strong&gt; Includes an optional TCP server so external scripts or status bars (Polybar, Waybar, SketchyBar) can listen to active layer states or trigger layer shifts dynamically.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Active Community Ecosystem:&lt;/strong&gt; Widely adopted in the ergonomic keyboard community (e.g., used by projects like &lt;em&gt;Kenkyo&lt;/em&gt;).&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Drawbacks
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Lisp Syntax Learning Curve:&lt;/strong&gt; Config files use S-expressions (&lt;code&gt;defsrc&lt;/code&gt;, &lt;code&gt;deflayer&lt;/code&gt;, &lt;code&gt;defalias&lt;/code&gt;). For users unfamiliar with Lisp or Scheme formatting, reading and debugging nested parens can be daunting initially.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  3. keydo (&lt;code&gt;argenkiwi/keydo&lt;/code&gt;) — The "Keyd, Oxidised" Alternative
&lt;/h2&gt;

&lt;h3&gt;
  
  
  What is it?
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://github.com/argenkiwi/keydo" rel="noopener noreferrer"&gt;keydo&lt;/a&gt;, created by &lt;a href="https://github.com/argenkiwi" rel="noopener noreferrer"&gt;Leandro (&lt;code&gt;argenkiwi&lt;/code&gt;)&lt;/a&gt; (author of the &lt;em&gt;Kenkyo&lt;/em&gt; ergonomic ANSI layout), is an open-source project described as "Keyd, oxidised". It was started to solve a specific pain point: lovers of &lt;code&gt;keyd&lt;/code&gt;'s clean, intuitive INI configuration file format wanted those same ergonomics on platforms beyond Linux without having to convert everything to Kanata's S-expression syntax.&lt;/p&gt;

&lt;h3&gt;
  
  
  Key Strengths
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;The Best of Both Worlds:&lt;/strong&gt; Combines the human-readable, minimal INI configuration design of &lt;code&gt;keyd&lt;/code&gt; with the memory safety, concurrency, and cross-platform potential of Rust.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Familiar Mental Model for keyd Users:&lt;/strong&gt; If you already have a &lt;code&gt;keyd&lt;/code&gt; setup or prefer readable &lt;code&gt;key = overload(control, esc)&lt;/code&gt; directives over nested Lisp macros, &lt;code&gt;keydo&lt;/code&gt; offers an approachable path.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Designed with Ergonomic Workflows in Mind:&lt;/strong&gt; Born from hands-on experimentation with home row modifiers, custom chords, and thumb-shift patterns on standard ANSI boards.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Drawbacks
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Newer Project:&lt;/strong&gt; Compared to the battle-tested &lt;code&gt;keyd&lt;/code&gt; (C) and &lt;code&gt;kanata&lt;/code&gt; (Rust), &lt;code&gt;keydo&lt;/code&gt; is younger and under active development, so some niche features or edge-case platform drivers may still be maturing.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Configuration Comparison: A Practical Example
&lt;/h2&gt;

&lt;p&gt;To see how these tools differ in practice, let's look at how you configure a classic ergonomic pattern:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Goal:&lt;/strong&gt; Turn &lt;code&gt;Caps Lock&lt;/code&gt; into &lt;code&gt;Escape&lt;/code&gt; when tapped, and &lt;code&gt;Control&lt;/code&gt; when held. When holding &lt;code&gt;Caps Lock&lt;/code&gt;, press &lt;code&gt;j&lt;/code&gt;, &lt;code&gt;k&lt;/code&gt;, &lt;code&gt;h&lt;/code&gt;, &lt;code&gt;l&lt;/code&gt; for arrow navigation.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  &lt;code&gt;keyd&lt;/code&gt; (&lt;code&gt;/etc/keyd/default.conf&lt;/code&gt;)
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
ini
[ids]
*

[main]
capslock = overload(nav, esc)

[nav:C]
h = left
j = down
k = up
l = right
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

</description>
      <category>productivity</category>
      <category>tools</category>
      <category>keyboards</category>
      <category>a11y</category>
    </item>
    <item>
      <title>Stop Reaching for the Arrow Keys: An Intro to the Kenkyo Keyboard Layout</title>
      <dc:creator>Leandro</dc:creator>
      <pubDate>Mon, 10 Aug 2026 20:33:50 +0000</pubDate>
      <link>https://dev.to/argenkiwi/stop-reaching-for-the-arrow-keys-an-intro-to-the-kenkyo-keyboard-layout-25d9</link>
      <guid>https://dev.to/argenkiwi/stop-reaching-for-the-arrow-keys-an-intro-to-the-kenkyo-keyboard-layout-25d9</guid>
      <description>&lt;p&gt;Every developer knows the subtle tax of context-switching in your physical environment. You’re deep in the flow state, writing code, when you need to select a word three lines up or trigger an &lt;code&gt;Escape&lt;/code&gt; key in Vim or your IDE. Your right hand leaves the home row, reaches across the desk to the arrow keys or navigation cluster, makes the adjustment, and travels back to reset your home-row positioning.&lt;/p&gt;

&lt;p&gt;Do that hundreds of times a day, and it adds up to physical strain and micro-interruptions to your concentration.&lt;/p&gt;

&lt;p&gt;Split ergonomic ortholinear keyboards (like the Moonlander, Glove80, or Corne) solve this using &lt;strong&gt;layers&lt;/strong&gt; and &lt;strong&gt;home-row modifiers&lt;/strong&gt;. But what if you could get 90% of those ergonomic powers on the standard ANSI keyboard on your laptop without buying new hardware or ruining your regular typing habits?&lt;/p&gt;

&lt;p&gt;Enter &lt;strong&gt;&lt;a href="https://github.com/argenkiwi/kenkyo" rel="noopener noreferrer"&gt;Kenkyo&lt;/a&gt;&lt;/strong&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  What is Kenkyo?
&lt;/h2&gt;

&lt;p&gt;Named after the Japanese word for humility or modesty (&lt;em&gt;謙虚&lt;/em&gt;), &lt;strong&gt;Kenkyo&lt;/strong&gt; is a open-source, software-based layered keyboard layout. True to its name, its core design philosophy is to stay completely out of your way until you need it.&lt;/p&gt;

&lt;p&gt;Unlike custom layouts that force you to re-learn where letters sit (like Dvorak or Colemak), Kenkyo retains standard &lt;strong&gt;QWERTY&lt;/strong&gt; typing for basic input. It simply supercharges your keyboard through software overlays like &lt;strong&gt;Kanata&lt;/strong&gt; (cross-platform) or &lt;strong&gt;Keyd&lt;/strong&gt; (Linux).&lt;/p&gt;

&lt;p&gt;With Kenkyo, you can access &lt;strong&gt;100% of standard keyboard functionality using just 31 keys&lt;/strong&gt;, keeping your hands centered on the home row at all times.&lt;/p&gt;




&lt;h2&gt;
  
  
  Core Philosophy &amp;amp; Key Features
&lt;/h2&gt;

&lt;p&gt;Kenkyo is built on four developer-friendly principles:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Hardware Agnostic:&lt;/strong&gt; Works on any standard ANSI built-in laptop keyboard or external desktop board.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Progressive Learning:&lt;/strong&gt; You don't have to go all-in on day one. Your standard typing muscle memory remains intact; you opt into shortcut layers at your own pace.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Composability:&lt;/strong&gt; Combines established power-user paradigms like &lt;strong&gt;SpaceFn&lt;/strong&gt; (holding &lt;code&gt;Space&lt;/code&gt; triggers a navigation layer) and &lt;strong&gt;Home Row Modifiers&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Zero Motion Overhead:&lt;/strong&gt; Keeps navigation, function keys, symbols, and modifier chords directly under your fingertips.&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  How It Works: The Layers
&lt;/h2&gt;

&lt;p&gt;Kenkyo relies on a few intuitive layers toggled by holding down specific keys.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Main Layer (Home Row Modifiers)
&lt;/h3&gt;

&lt;p&gt;Instead of twisting your pinkies to reach &lt;code&gt;Ctrl&lt;/code&gt;, &lt;code&gt;Alt&lt;/code&gt;, &lt;code&gt;Shift&lt;/code&gt;, or &lt;code&gt;Cmd/Super&lt;/code&gt;, Kenkyo turns your home row keys into modifiers when held down:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Left Hand:&lt;/strong&gt; &lt;code&gt;A&lt;/code&gt; (Meta/Cmd), &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;Right Hand:&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;code&gt;;&lt;/code&gt; (Meta/Cmd)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Tapping the key types the letter normally; holding it acts as the modifier.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Extend Layer (Navigation &amp;amp; Editing)
&lt;/h3&gt;

&lt;p&gt;Hold down the &lt;strong&gt;Spacebar&lt;/strong&gt; to activate the &lt;strong&gt;Extend Layer&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Right Hand:&lt;/strong&gt; Becomes your complete navigation cluster. Arrow keys, &lt;code&gt;Home&lt;/code&gt;, &lt;code&gt;End&lt;/code&gt;, &lt;code&gt;Page Up&lt;/code&gt;, and &lt;code&gt;Page Down&lt;/code&gt; sit under &lt;code&gt;HJKL&lt;/code&gt; / &lt;code&gt;IJKM&lt;/code&gt; positions. Editing keys like &lt;code&gt;Backspace&lt;/code&gt;, &lt;code&gt;Delete&lt;/code&gt;, &lt;code&gt;Enter&lt;/code&gt;, and &lt;code&gt;Tab&lt;/code&gt; are right next to them.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Left Hand:&lt;/strong&gt; Media controls (Volume Up/Down, Mute, Play/Pause).&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  3. Fumbol Layer (Numbers, Symbols &amp;amp; F-Keys)
&lt;/h3&gt;

&lt;p&gt;Hold &lt;code&gt;V&lt;/code&gt; or &lt;code&gt;M&lt;/code&gt; (or trigger it from the Extend Layer) to transform your home row into a high-speed number pad and function bar:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Numbers:&lt;/strong&gt; Arranged conveniently along the home row.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;F-Keys:&lt;/strong&gt; &lt;code&gt;F1&lt;/code&gt;–&lt;code&gt;F10&lt;/code&gt; mapped across the top row, with &lt;code&gt;F11&lt;/code&gt;–&lt;code&gt;F12&lt;/code&gt; on the bottom.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Math Chords:&lt;/strong&gt; Built-in fast chords for common math operations (&lt;code&gt;-&lt;/code&gt;, &lt;code&gt;+&lt;/code&gt;, &lt;code&gt;=&lt;/code&gt;, &lt;code&gt;/&lt;/code&gt;, &lt;code&gt;*&lt;/code&gt;).&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Ergonomic "Chords"
&lt;/h2&gt;

&lt;p&gt;To eliminate far-reaching key stretches altogether, Kenkyo introduces two-key simultaneous "chords" for high-frequency actions:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;W + E&lt;/code&gt; → &lt;strong&gt;Escape&lt;/strong&gt; &lt;em&gt;(Vim users rejoice!)&lt;/em&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;I + O&lt;/code&gt; → &lt;strong&gt;Backspace&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;X + C&lt;/code&gt; → &lt;strong&gt;Tab&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;, + .&lt;/code&gt; → &lt;strong&gt;Enter&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Getting Started in 5 Minutes
&lt;/h2&gt;

&lt;p&gt;Setting up Kenkyo is straightforward since it runs as an invisible software daemon in the background.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 1: Choose Your Driver
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Windows, macOS, Linux:&lt;/strong&gt; &lt;a href="https://github.com/jtroo/kanata" rel="noopener noreferrer"&gt;Kanata&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Linux (Alternative):&lt;/strong&gt; &lt;a href="https://github.com/rvaiya/keyd" rel="noopener noreferrer"&gt;Keyd&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Step 2: Install the Configuration
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Clone the Kenkyo repository:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git clone https://github.com/argenkiwi/kenkyo.git

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;Copy the corresponding configuration file (&lt;code&gt;kanata.kbd&lt;/code&gt; or &lt;code&gt;keyd/default.conf&lt;/code&gt;) to your software's config folder (e.g., &lt;code&gt;~/.config/kanata/&lt;/code&gt; or &lt;code&gt;/etc/keyd/default.conf&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;Start the daemon service.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;That’s it! You can now start using SpaceFn navigation immediately. If you ever feel stuck, releasing held keys instantly drops you back into regular QWERTY typing.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why Give It a Try?
&lt;/h2&gt;

&lt;p&gt;If you've been curious about the productivity and health benefits of layered, ergonomic typing but aren't ready to invest in custom split hardware or completely rewire your muscle memory, &lt;strong&gt;Kenkyo&lt;/strong&gt; offers the perfect middle ground.&lt;/p&gt;

&lt;p&gt;Check out the full repository, documentation, and keymaps on GitHub:&lt;br&gt;
👉 &lt;strong&gt;&lt;a href="https://github.com/argenkiwi/kenkyo" rel="noopener noreferrer"&gt;github.com/argenkiwi/kenkyo&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Have you experimented with layered keyboard layouts or Home Row Modifiers in your dev workflow? Drop your thoughts in the comments below!&lt;/em&gt;&lt;/p&gt;

</description>
      <category>tools</category>
      <category>productivity</category>
      <category>a11y</category>
    </item>
    <item>
      <title>Automated plagiarism is a thing. I posted an article about Thumb Chords on this platform and I found out it quickly popped up on a site called PromptCube with different phrasing but same content and structure. The Internet as we know it is dying.</title>
      <dc:creator>Leandro</dc:creator>
      <pubDate>Thu, 06 Aug 2026 01:51:23 +0000</pubDate>
      <link>https://dev.to/argenkiwi/automated-plagiarism-is-a-thing-i-posted-an-article-about-thumb-chords-on-this-platform-and-i-39h8</link>
      <guid>https://dev.to/argenkiwi/automated-plagiarism-is-a-thing-i-posted-an-article-about-thumb-chords-on-this-platform-and-i-39h8</guid>
      <description></description>
    </item>
    <item>
      <title>Automated plagiarism is a thing. I published an article about Thumb Chords in this platform and it popped up in a dodgy site called PromptCube with different phasing but same content and structure. The Internet as we know it is dying.</title>
      <dc:creator>Leandro</dc:creator>
      <pubDate>Thu, 06 Aug 2026 01:50:10 +0000</pubDate>
      <link>https://dev.to/argenkiwi/automated-plagiarism-is-a-thing-i-published-an-article-about-thumb-chords-in-this-platform-and-it-2m8p</link>
      <guid>https://dev.to/argenkiwi/automated-plagiarism-is-a-thing-i-published-an-article-about-thumb-chords-in-this-platform-and-it-2m8p</guid>
      <description></description>
      <category>ai</category>
      <category>cybersecurity</category>
      <category>security</category>
    </item>
    <item>
      <title>Thumb Chords</title>
      <dc:creator>Leandro</dc:creator>
      <pubDate>Sun, 26 Jul 2026 22:55:40 +0000</pubDate>
      <link>https://dev.to/argenkiwi/thumb-chords-1j5</link>
      <guid>https://dev.to/argenkiwi/thumb-chords-1j5</guid>
      <description>&lt;p&gt;I have been experimenting with a pattern I call &lt;em&gt;Thumb Chord&lt;/em&gt; that consists of pressing a thumb key (the space-bar on a standard keyboard) and a home row key (&lt;code&gt;A&lt;/code&gt; to &lt;code&gt;;&lt;/code&gt; on an QWERTY keyboard) &lt;strong&gt;simultaneously&lt;/strong&gt; to form a chord which outputs a modifier, like shift or control.&lt;/p&gt;

&lt;p&gt;Here is a minimal layout definition, based on keyd's configuration format, to illustrate the pattern:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight ini"&gt;&lt;code&gt;&lt;span class="nn"&gt;[ids]&lt;/span&gt;

&lt;span class="err"&gt;*&lt;/span&gt;

&lt;span class="nn"&gt;[main]&lt;/span&gt;

&lt;span class="err"&gt;d+&lt;/span&gt;&lt;span class="py"&gt;space&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;oneshot(shift)&lt;/span&gt;
&lt;span class="err"&gt;k+&lt;/span&gt;&lt;span class="py"&gt;space&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;oneshot(shift)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;When combined with the &lt;em&gt;one-shot modifiers&lt;/em&gt; pattern, tapping the chord will modify the next key tapped and deactivate immediately after. Alternatively, if the user released only the home row key while keeping the thumb key down, the modifier would remain active, anchored to the thumb key until it was released. This allows typists to, for example, capitalize a full word without having to hold the physical shift key with the little fingers or having to enable caps-lock.&lt;/p&gt;

&lt;p&gt;The goal of this pattern is to achieve ergonomic modifiers while maintaining error proneness to a minimum. The pattern can be used in combination with or as an alternative to &lt;em&gt;home row modifiers&lt;/em&gt;. &lt;/p&gt;

&lt;p&gt;The advantage of using chords (or combos) is that they do not rely on additional timing calculations. The only requirement is that the key-down events for the keys involved occur within a short time window, usually of 50 milliseconds, which ensures pressing the keys simultaneously has been intended as a chord. &lt;/p&gt;

&lt;p&gt;The main caveat of chords it that the activation threshold needs to be below the fastest key-roll to or from the thumb-key, which is particularly relevant when using the space-bar for the pattern. To measure these, I put together a &lt;a href="https://github.com/argenkiwi/spaceroll" rel="noopener noreferrer"&gt;tool&lt;/a&gt; that also captures WPM, which will likely correlate with the results.&lt;/p&gt;

&lt;p&gt;Some of the relevant properties of the pattern I have identified are:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;If HRMs are used, the motor memory for their placement can be retained when learning this pattern.&lt;/li&gt;
&lt;li&gt;It allows for easy anchoring of a modifier onto a thumb key or the space-bar, which facilitates the use of fingers of both hands while holding the modifier.&lt;/li&gt;
&lt;li&gt;It enables the use of one-shot modifiers without the need to use additional dedicated physical (thumb?) keys.&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>productivity</category>
      <category>tooling</category>
      <category>a11y</category>
    </item>
    <item>
      <title>I have been experimenting with a variant of LLM Wiki based on the Zettelkasten note-taking methodology that encourages your AI agent to read notes before each iteration and take notes after, which can be source-controlled.</title>
      <dc:creator>Leandro</dc:creator>
      <pubDate>Wed, 15 Jul 2026 18:39:05 +0000</pubDate>
      <link>https://dev.to/argenkiwi/i-have-been-experimenting-with-a-variant-of-llm-wiki-based-on-the-zettelkasten-note-taking-2gbg</link>
      <guid>https://dev.to/argenkiwi/i-have-been-experimenting-with-a-variant-of-llm-wiki-based-on-the-zettelkasten-note-taking-2gbg</guid>
      <description></description>
      <category>agents</category>
      <category>ai</category>
      <category>llm</category>
      <category>productivity</category>
    </item>
    <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>
  </channel>
</rss>
