<?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: Cristhiam Leonardo Hernández Quiñonez </title>
    <description>The latest articles on DEV Community by Cristhiam Leonardo Hernández Quiñonez  (@thrumanshow).</description>
    <link>https://dev.to/thrumanshow</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%2F4122671%2Fa4620392-5c4e-4c26-8b32-8d2e002450d7.jpg</url>
      <title>DEV Community: Cristhiam Leonardo Hernández Quiñonez </title>
      <link>https://dev.to/thrumanshow</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/thrumanshow"/>
    <language>en</language>
    <item>
      <title>Architecture for Autonomous Agents</title>
      <dc:creator>Cristhiam Leonardo Hernández Quiñonez </dc:creator>
      <pubDate>Sun, 27 Sep 2026 09:37:30 +0000</pubDate>
      <link>https://dev.to/thrumanshow/architecture-for-autonomous-agents-5ee2</link>
      <guid>https://dev.to/thrumanshow/architecture-for-autonomous-agents-5ee2</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fs4ml7ruqnkzboo4lrimh.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fs4ml7ruqnkzboo4lrimh.png" alt=" " width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://blog.hormigasais.com/posts/arquitectura-soberana-agentes-autonomos.html" rel="noopener noreferrer"&gt;blog.hormigasais.com&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  description: How an architecture inspired by Edge Computing, distributed control, and lightweight protocols enables building autonomous systems prepared for the next generation of distributed intelligence.
&lt;/h2&gt;

&lt;p&gt;tags: architecture, ai, python, edgecomputing&lt;/p&gt;

&lt;p&gt;Sovereign Architecture for Autonomous Agents: Integrating Signal Networks, Git, Python, and Lightweight Protocols at the Edge&lt;br&gt;
In nature, an ant colony does not need a single command center to coordinate its behavior. Each individual responds to local signals — such as pheromones — and simple rules; from the interaction of these signals emerges a collective behavior capable of solving complex problems.&lt;/p&gt;

&lt;p&gt;The analogy is useful for thinking about distributed systems, but there is an important difference:&lt;br&gt;
a software architecture should not literally copy nature. It must convert its principles — locality, signals, coordination, and adaptation — into verifiable technical mechanisms.&lt;/p&gt;

&lt;p&gt;In 2026 software engineering, this idea connects directly with a consolidated trend: moving part of the processing and decision-making toward the edge of the network — the Edge — instead of concentrating all operations in remote infrastructure.&lt;/p&gt;

&lt;p&gt;The goal is not to eliminate the cloud. The goal is to decide what must remain close to the data source, what can run locally, and which external services are truly necessary.&lt;/p&gt;

&lt;h2&gt;
  
  
  This article presents six pillars for a sovereign architecture oriented toward autonomous agents:
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Signal Network&lt;/li&gt;
&lt;li&gt;Git as Desired State Infrastructure&lt;/li&gt;
&lt;li&gt;Python as the Orchestration Core&lt;/li&gt;
&lt;li&gt;LBH Protocol&lt;/li&gt;
&lt;li&gt;Edge Architecture&lt;/li&gt;
&lt;li&gt;Technical Governance and Traceability&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is not a step-by-step tutorial. It is an architectural roadmap to design distributed systems in which autonomy, traceability, and operational control are explicit properties of the design.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Why the Edge? From the Centralized Model to Local Decision-Making
For years, many software architectures followed a centralized pattern:&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;data traveled to remote services, the main logic was executed there, and subsequently, the result returned to the device.&lt;/p&gt;

&lt;p&gt;That model continues to be appropriate for numerous use cases. However, not all systems have the same constraints.&lt;/p&gt;

&lt;p&gt;Robotics, sensors, industrial automation, vehicles, critical infrastructure, and agents that must continue operating under intermittent connectivity may require local processing, lower latency, and degraded operation capabilities.&lt;/p&gt;

&lt;p&gt;That is why the Edge should not be defined simply as a performance optimization.&lt;/p&gt;

&lt;p&gt;In a sovereign architecture, the Edge is a control decision:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Sensitive data can remain close to its source.&lt;/li&gt;
&lt;li&gt;Critical decisions can be executed locally.&lt;/li&gt;
&lt;li&gt;Operations can continue even if the connection to remote services is interrupted.&lt;/li&gt;
&lt;li&gt;The architecture can reduce unnecessary traffic to external infrastructure.&lt;/li&gt;
&lt;li&gt;Each node can maintain an explicit part of the system's operational capacity.
&amp;gt; Key Principle: Sovereignty does not mean disconnecting from the cloud. It means that an external dependency should not automatically become a single point of decision, operation, or failure.&lt;/li&gt;
&lt;/ul&gt;

&lt;ol&gt;
&lt;li&gt;The Signal Network: Event-Driven Architecture
If the Edge is the body, the signal network is the nervous system.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Instead of constantly querying the status of all components, an event-driven architecture allows nodes to publish relevant changes and other components to react to them.&lt;/p&gt;

&lt;p&gt;This pattern — Event-Driven Architecture (EDA) — appears in messaging and connectivity systems such as NATS and MQTT, although each technology has different characteristics and guarantees.&lt;/p&gt;

&lt;h2&gt;
  
  
  MQTT, for example, is designed as a lightweight publish/subscribe protocol for IoT and networks with limited resources or bandwidth. NATS offers publish/subscribe, request/reply, and streaming patterns, including capabilities oriented toward distributed systems and the Edge.
&lt;/h2&gt;

&lt;p&gt;In HormigasAIS, the fundamental idea is more general:&lt;br&gt;
do not constantly ask about everything; emit signals when something changes and allow interested components to react.&lt;br&gt;
Conceptual example of a signal:&lt;br&gt;
{&lt;br&gt;
  "timestamp": 1766646840.426,&lt;br&gt;
  "type": "mosquito_pulse",&lt;br&gt;
  "origin": "manager_alpha",&lt;br&gt;
  "status": "active",&lt;br&gt;
  "mode": "master"&lt;br&gt;
}&lt;/p&gt;

&lt;p&gt;The message can represent a telemetry event, a state change, a coordination signal, or a condition that requires processing.&lt;br&gt;
The signal network decouples producers and consumers and allows new components to be incorporated without redesigning the entire system.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Git as Infrastructure of the Desired State
Git is officially defined as a distributed version control system. Its value in a sovereign architecture goes beyond storing code.
A Git repository can be used as a traceability layer for:

&lt;ul&gt;
&lt;li&gt;behavior rules;&lt;/li&gt;
&lt;li&gt;declarative configurations;&lt;/li&gt;
&lt;li&gt;contracts between components;&lt;/li&gt;
&lt;li&gt;technical documentation;&lt;/li&gt;
&lt;li&gt;schemas and specifications;&lt;/li&gt;
&lt;li&gt;deployment policies;&lt;/li&gt;
&lt;li&gt;configuration artifacts;&lt;/li&gt;
&lt;li&gt;change history.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;However, there is an important clarification:&lt;br&gt;
Git should not be confused with an operational database or an absolute immutable ledger.&lt;/p&gt;

&lt;p&gt;Its strength lies in conserving and distributing a project's history of changes. Each clone contains the repository history, which allows working in a distributed manner and recovering information even if a remote server becomes unavailable.&lt;/p&gt;

&lt;p&gt;In a sovereign architecture, this allows separating two concepts:&lt;/p&gt;

&lt;p&gt;Desired state: what the system declares it should be.&lt;br&gt;
Operational state: what is occurring at the nodes at this moment.&lt;/p&gt;

&lt;p&gt;Git can represent the former. Databases, queues, logs, and telemetry can represent the latter.&lt;br&gt;
This separation is fundamental to avoid turning a version control tool into a piece that does too much work.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Python as the Orchestration Core
In this architecture, Python occupies the role of the coordination layer.
This does not mean that Python must execute every high-frequency operation.
An Edge node can divide responsibilities across different layers:

&lt;ul&gt;
&lt;li&gt;Python for business logic and orchestration.&lt;/li&gt;
&lt;li&gt;Compiled binaries for high-performance operations.&lt;/li&gt;
&lt;li&gt;Lightweight protocols for inter-node communication.&lt;/li&gt;
&lt;li&gt;Local databases for operational state.&lt;/li&gt;
&lt;li&gt;Git for configuration, specifications, and traceability.&lt;/li&gt;
&lt;li&gt;Specialized services for tasks requiring a different runtime.
This separation allows using Python where it offers the most value: connecting components, processing events, applying rules, coordinating tasks, and maintaining high-level logic.
The principle is not to choose a single language for everything.
The principle is to assign each responsibility to the appropriate level.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;The LBH Protocol: Lightweight Serialization with Verifiable Identity
The Hormigas Binary Language (LBH) constitutes a specific layer within the HormigasAIS architecture.
Its purpose is to provide a machine-to-machine communication format oriented toward environments where message size, sender identity, and data verifiability are relevant.
The architecture can treat the protocol as a contractual boundary between nodes:
input → validation → interpretation → processing → response
Cryptographic identity allows a message to be treated not simply as arbitrary bytes, but as a unit associated with an identity and validation rules.
Validation must consider, depending on the implementation:

&lt;ul&gt;
&lt;li&gt;message integrity;&lt;/li&gt;
&lt;li&gt;authenticity;&lt;/li&gt;
&lt;li&gt;node identity;&lt;/li&gt;
&lt;li&gt;protection against message replay;&lt;/li&gt;
&lt;li&gt;protocol version;&lt;/li&gt;
&lt;li&gt;schema compatibility;&lt;/li&gt;
&lt;li&gt;execution context.
LBH Validation Signature
VALIDADO_NODO_A16_SV_2026_07_17_0120_AUTONOMO&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This string functions as a validation identifier within the architectural example. It should not be interpreted on its own as a cryptographic proof: real verification must depend on cryptographic primitives, keys, metadata, and rules defined by the protocol's implementation.&lt;/p&gt;

&lt;p&gt;That detail is important.&lt;br&gt;
A sovereign architecture should not ask for blind trust in a label. It must allow verifying the assertion.&lt;/p&gt;

&lt;h2&gt;
  
  
  6. Edge Architecture: Distributed Intelligence, Not Isolation
&lt;/h2&gt;

&lt;p&gt;The Edge node is where the previous layers meet.&lt;br&gt;
A node can receive signals, maintain local state, execute coordination logic, validate LBH messages, and synchronize the desired state defined by the infrastructure.&lt;br&gt;
A simplified representation would be:&lt;br&gt;
                 ┌───────────────────────────┐&lt;br&gt;
                 │       DESIRED STATE       │&lt;br&gt;
                 │      Git / contracts      │&lt;br&gt;
                 └────────────┬──────────────┘&lt;br&gt;
                              │&lt;br&gt;
                              ▼&lt;br&gt;
┌───────────────┐      ┌─────────────────────┐      ┌───────────────┐&lt;br&gt;
│ Signal Net    │ ───► │      EDGE NODE      │ ◄─── │   Protocol    │&lt;br&gt;
│ EDA / MQTT    │      │                     │      │      LBH      │&lt;br&gt;
│ / NATS        │      │ Python / runtime    │      │  validation   │&lt;br&gt;
└───────────────┘      │ Local state         │      └───────────────┘&lt;br&gt;
                       │ Rules / agents      │&lt;br&gt;
                       └──────────┬──────────┘&lt;br&gt;
                                  │&lt;br&gt;
                                  ▼&lt;br&gt;
                       ┌────────────────────┐&lt;br&gt;
                       │ Sensors /          │&lt;br&gt;
                       │ actuators / AI     │&lt;br&gt;
                       └────────────────────┘&lt;/p&gt;

&lt;p&gt;The cloud can continue to exist as a complementary layer:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;synchronization;&lt;/li&gt;
&lt;li&gt;long-term storage;&lt;/li&gt;
&lt;li&gt;heavy analysis;&lt;/li&gt;
&lt;li&gt;collaboration;&lt;/li&gt;
&lt;li&gt;observability;&lt;/li&gt;
&lt;li&gt;model training;&lt;/li&gt;
&lt;li&gt;services that do not need to run locally.
The architectural difference lies in the fact that the Edge node is not reduced to a dependent terminal connected to a remote center.
It can retain local capabilities and operate under previously defined policies.

&lt;ol&gt;
&lt;li&gt;Technical Governance and Traceability
Autonomy without governance can quickly turn into complexity.
Therefore, a distributed architecture needs mechanisms to know:&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;which version each node is running;&lt;/li&gt;
&lt;li&gt;what configuration it has;&lt;/li&gt;
&lt;li&gt;which protocol it is using;&lt;/li&gt;
&lt;li&gt;what changes were made;&lt;/li&gt;
&lt;li&gt;which messages were accepted or rejected;&lt;/li&gt;
&lt;li&gt;which components can communicate;&lt;/li&gt;
&lt;li&gt;which policies are active;&lt;/li&gt;
&lt;li&gt;how to recover a known state.
Here appears the sixth principle:
every important decision must leave a verifiable footprint.
Technical governance does not mean controlling every operation from a central server. It means defining contracts, boundaries, identities, and recovery procedures that can be audited.
Autonomy and governance are not opposites.
A mature architecture needs both.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  8. The Complete Architecture
&lt;/h2&gt;

&lt;p&gt;The six pillars can be summarized as follows:&lt;br&gt;
SIGNAL NETWORK&lt;br&gt;
      │&lt;br&gt;
      ▼&lt;br&gt;
   EVENTS ──────────────┐&lt;br&gt;
                        │&lt;br&gt;
                        ▼&lt;br&gt;
                 ┌─────────────┐&lt;br&gt;
                 │  EDGE NODE  │&lt;br&gt;
                 │             │&lt;br&gt;
                 │   Python    │&lt;br&gt;
                 │      +      │&lt;br&gt;
                 │   agents    │&lt;br&gt;
                 └──────┬──────┘&lt;br&gt;
                        │&lt;br&gt;
             ┌──────────┴──────────┐&lt;br&gt;
             ▼                     ▼&lt;br&gt;
       LBH PROTOCOL           LOCAL STATE&lt;br&gt;
             │                     │&lt;br&gt;
             └──────────┬──────────┘&lt;br&gt;
                        ▼&lt;br&gt;
               TECHNICAL GOVERNANCE&lt;br&gt;
                        ▲&lt;br&gt;
                        │&lt;br&gt;
                  GIT / CONTRACTS&lt;/p&gt;

&lt;p&gt;Each component has a distinct function.&lt;br&gt;
The signal network communicates.&lt;br&gt;
Python coordinates.&lt;br&gt;
LBH defines a verifiable communication boundary.&lt;br&gt;
The Edge executes close to the data source.&lt;br&gt;
Git conserves project history and desired state.&lt;br&gt;
Governance provides the rules that allow everything above to evolve without losing traceability.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Sovereignty as an Architectural Property
Technological sovereignty should not be reduced to a political or commercial statement.
In engineering, it can be expressed as a verifiable property of the system:
What can the system continue to do if an external dependency disappears?
The answer identifies which parts of the architecture are truly autonomous and which continue to depend on external services.
A system can use the Internet, cloud, GitHub, external APIs, or specialized services and still maintain an Edge architecture.
The relevant question is not whether a dependency exists.
The question is:
What happens when that dependency stops being available?
That scenario — the degraded mode — is one of the most useful tests to evaluate the real autonomy of a distributed system.&lt;/li&gt;
&lt;li&gt;Conclusion
Sovereignty is not isolation.
It is the capacity for decision, operation, and recovery under defined conditions.
An architecture for autonomous agents can combine signal networks, Git, Python, lightweight protocols, and Edge nodes without turning any of them into a universal solution.
Architecture emerges from the separation of responsibilities.
Events transport signals.
Nodes execute local decisions.
Protocols establish contracts.
Git conserves history and desired state.
Governance provides traceability.
And Edge infrastructure keeps close to data the capabilities that truly need to remain local.
Like an ant colony, the system does not need every decision to pass through a single point to coordinate.
It needs signals.
It needs rules.
It needs identity.
It needs memory.
And above all, it needs verifiable mechanisms to know what is occurring.
&amp;gt; Sovereignty is not isolation: it is the capacity for autonomous decision-making.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Traceability and Source Code
&lt;/h2&gt;

&lt;p&gt;The protocol specification, mapping matrix, and artifacts related to this architecture are publicly available through the HormigasAIS ecosystem.&lt;br&gt;
Site:&lt;/p&gt;

&lt;p&gt;Reference node:&lt;br&gt;
Node A16 — San Miguel, El Salvador&lt;br&gt;
Example validation identifier:&lt;br&gt;
VALIDADO_NODO_A16_SV_2026_07_17_0120_AUTONOMO&lt;/p&gt;

</description>
      <category>ai</category>
      <category>python</category>
      <category>opensource</category>
      <category>automation</category>
    </item>
    <item>
      <title>Building Resilient Edge Agents with LBH: A PWA Heartbeat System Running on Android</title>
      <dc:creator>Cristhiam Leonardo Hernández Quiñonez </dc:creator>
      <pubDate>Wed, 16 Sep 2026 03:05:45 +0000</pubDate>
      <link>https://dev.to/thrumanshow/building-resilient-edge-agents-with-lbh-a-pwa-heartbeat-system-running-on-android-51m</link>
      <guid>https://dev.to/thrumanshow/building-resilient-edge-agents-with-lbh-a-pwa-heartbeat-system-running-on-android-51m</guid>
      <description>&lt;p&gt;Most edge demos look great on a laptop.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;I'm currently building HormigasAIS,&lt;/strong&gt; a lightweight edge architecture designed to run agents and services from constrained devices. One of the core pieces is a binary protocol called LBH (Lenguaje Binario HormigasAIS) and a small WebSocket client that keeps the channel alive under real mobile conditions.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;This post shows the current state of that client&lt;/strong&gt; — specifically the heartbeat + telemetry layer — a recent resilience improvement for Android background behavior, and what happened when I moved from a browser demo to an actual installed app on the phone.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Core: LBHHeartbeatAnt
&lt;/h3&gt;

&lt;p&gt;The client is a single class that manages:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;WebSocket connection to a local Edge Node (&lt;code&gt;ws://hostname:8765&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Binary LBH frames&lt;/li&gt;
&lt;li&gt;Heartbeat (pheromone) messages&lt;/li&gt;
&lt;li&gt;Inactivity detection&lt;/li&gt;
&lt;li&gt;Automatic reconnection&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Key design decisions:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Binary frames start with magic bytes &lt;code&gt;"LA"&lt;/code&gt; (&lt;code&gt;0x4C&lt;/code&gt;, &lt;code&gt;0x41&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Type &lt;code&gt;0x01&lt;/code&gt; → Telemetry&lt;/li&gt;
&lt;li&gt;Type &lt;code&gt;0x02&lt;/code&gt; → Heartbeat / ACK (called "Feromona")&lt;/li&gt;
&lt;li&gt;When the user is inactive for 30 seconds, the client enters a &lt;code&gt;HIBERNATING&lt;/code&gt; state while keeping the socket open&lt;/li&gt;
&lt;li&gt;Any user activity (click, touch, keydown…) "unfreezes" the channel&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Here's the essential part of the heartbeat emission:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nf"&gt;emitHeartbeatPheromone&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;ws&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;ws&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;readyState&lt;/span&gt; &lt;span class="o"&gt;!==&lt;/span&gt; &lt;span class="nx"&gt;WebSocket&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;OPEN&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;buffer&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;ArrayBuffer&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;16&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;view&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;DataView&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;buffer&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

  &lt;span class="nx"&gt;view&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;setUint8&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0x4C&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// L&lt;/span&gt;
  &lt;span class="nx"&gt;view&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;setUint8&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0x41&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// A&lt;/span&gt;
  &lt;span class="nx"&gt;view&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;setUint8&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0x02&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// Heartbeat / Feromona&lt;/span&gt;
  &lt;span class="nx"&gt;view&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;setUint8&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0x01&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// Standby flag&lt;/span&gt;

  &lt;span class="nx"&gt;view&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;setUint32&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;9999&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="nx"&gt;view&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;setUint32&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="nx"&gt;view&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;setUint32&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;12&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;Math&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;floor&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;Date&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;now&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="mi"&gt;1000&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;

  &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;ws&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;send&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;buffer&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;Telemetry frames follow the same structure (type &lt;code&gt;0x01&lt;/code&gt;) and carry a sensor ID + value.&lt;/p&gt;

&lt;h3&gt;
  
  
  Real Runtime Behavior
&lt;/h3&gt;

&lt;p&gt;From the Edge Node logs you can see the system working:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;🐜 Trama 0x01 | Sensor=1001 | Val=600 | TS=1789366095
⚠️  [AGENTE AUTÓNOMO] Alerta Sensor 1001 → Val=600
🐜 Respuesta LBH enviada

🐜 Trama 0x01 | Sensor=1001 | Val=400 | TS=1789366395
🐜 Respuesta LBH enviada
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And the continuous heartbeat ACKs:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;❄️  Feromona 0x02 ACK (socket preservado)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The UI on the phone simply shows a telemetry input and a green &lt;strong&gt;"Enviar Trama LBH"&lt;/strong&gt; button.&lt;/p&gt;

&lt;p&gt;When the channel is healthy, it displays:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;«Canal Activo (Descongelado)»&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The goal is deliberately simple: the user should not need to understand the underlying socket state, frame format, or reconnection mechanism.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Android Problem and the Fix
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Android browsers are aggressive.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;When a PWA goes to the background, the WebSocket can be killed without producing a clean &lt;code&gt;onclose&lt;/code&gt; event. The normal 3-second reconnect timer is therefore too slow for a good user experience in some situations.&lt;/p&gt;

&lt;p&gt;I added a &lt;code&gt;visibilitychange&lt;/code&gt; listener:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nf"&gt;setupVisibilityListener&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;addEventListener&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;visibilitychange&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;hidden&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;isDead&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;ws&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt;
      &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;ws&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;readyState&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="nx"&gt;WebSocket&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;CLOSED&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt;
      &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;ws&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;readyState&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="nx"&gt;WebSocket&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;CLOSING&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;isDead&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;_setState&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;OFFLINE&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;🟡 Verificando canal tras reanudar...&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
      &lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;connect&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt; &lt;span class="c1"&gt;// safe to call repeatedly&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;Now, as soon as the user returns to the app, the client checks the socket state and reconnects immediately if needed.&lt;/p&gt;

&lt;p&gt;The important part is not trying to fight Android's lifecycle behavior. Instead, the client treats visibility changes as part of the runtime environment.&lt;/p&gt;

&lt;h3&gt;
  
  
  Update: Tested as a Real Installed App
&lt;/h3&gt;

&lt;p&gt;After writing the piece above, I installed the PWA directly on the Android device using the browser's install prompt — not just a localhost browser tab.&lt;/p&gt;

&lt;p&gt;I then tested it with split-screen:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The PWA running in one pane&lt;/li&gt;
&lt;li&gt;The Edge Node's live log running in the other&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;With the screen locked or the app pushed to the background, the log kept showing:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;❄️  Feromona 0x02 ACK (socket preservado)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;continuously.&lt;/p&gt;

&lt;p&gt;That confirmed an important behavior in this particular test environment: the socket survived backgrounding as an installed app, not only as an open browser tab.&lt;/p&gt;

&lt;p&gt;This distinction matters when building edge agents for constrained mobile hardware. The phone isn't just being used as a browser; it is becoming part of the edge runtime.&lt;/p&gt;

&lt;h3&gt;
  
  
  A Known Rough Edge
&lt;/h3&gt;

&lt;p&gt;There is still one small race condition on the reconnect path.&lt;/p&gt;

&lt;p&gt;Switching visibility very quickly and repeatedly — for example, rapidly switching between apps — can occasionally produce a server log like:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;cliente conectado
cliente desconectado
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;where the &lt;code&gt;cliente conectado&lt;/code&gt; entry for the new socket can appear before the matching &lt;code&gt;cliente desconectado&lt;/code&gt; entry from the previous socket.&lt;/p&gt;

&lt;p&gt;The server handles both connections cleanly:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;No leaked connections&lt;/li&gt;
&lt;li&gt;No corrupted frames&lt;/li&gt;
&lt;li&gt;No protocol failure&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;However, the log ordering isn't strictly sequential in that edge case. The cause is a small gap in the current &lt;code&gt;connect()&lt;/code&gt; guard. At the moment, it checks for &lt;code&gt;OPEN&lt;/code&gt; and &lt;code&gt;CONNECTING&lt;/code&gt;, but does not yet treat &lt;code&gt;CLOSING&lt;/code&gt; as a state that should block a new connection attempt.&lt;/p&gt;

&lt;p&gt;Tightening that guard is on the list. For example, the intended logic is conceptually:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
  &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;ws&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt;
  &lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;ws&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;readyState&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="nx"&gt;WebSocket&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;OPEN&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt;
    &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;ws&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;readyState&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="nx"&gt;WebSocket&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;CONNECTING&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt;
    &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;ws&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;readyState&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="nx"&gt;WebSocket&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;CLOSING&lt;/span&gt;
  &lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;return&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;h3&gt;
  
  
  One Important Security Limitation
&lt;/h3&gt;

&lt;p&gt;It is also worth being upfront about the current security boundary.&lt;/p&gt;

&lt;p&gt;The WebSocket server currently has no authentication layer. That means any client on the same local network can send LBH frames to the endpoint.&lt;/p&gt;

&lt;p&gt;For a local development or demonstration node, this is acceptable for the current testing stage. It is not appropriate to expose this WebSocket endpoint directly on a public network in its current form. Authentication and authorization are therefore part of the next hardening stage.&lt;/p&gt;

&lt;h3&gt;
  
  
  Why This Matters for Edge Computing
&lt;/h3&gt;

&lt;p&gt;The interesting part of this experiment isn't simply keeping a WebSocket alive. The larger question is:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;«Can constrained devices participate in a useful distributed computing architecture without behaving like thin clients that constantly depend on a remote cloud?»&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;The current architecture is intentionally lightweight:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;┌──────────────────────┐
│      Android PWA     │
│                      │
│  Telemetry + LBH     │
│  Heartbeat           │
│  Reconnection        │
└──────────┬───────────┘
           │
           │ WebSocket
           │ Binary LBH
           ▼
┌──────────────────────┐
│      Edge Node       │
│                      │
│  LBH Parser          │
│  Agent Logic         │
│  Telemetry           │
│  ACK / Pheromone     │
└──────────────────────┘
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The phone can therefore act as both:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;A user interface, and&lt;/li&gt;
&lt;li&gt;A constrained edge computing endpoint.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;That opens an interesting path for low-cost deployments where dedicated server hardware isn't always available.&lt;/p&gt;

&lt;h3&gt;
  
  
  Current Focus
&lt;/h3&gt;

&lt;p&gt;This is still early-stage infrastructure.&lt;/p&gt;

&lt;p&gt;The goal is to turn these lightweight LBH agents into injectable services that universities and small/medium businesses (Pymes) can use without depending on heavy cloud stacks.&lt;/p&gt;

&lt;p&gt;The entire development loop — coding, testing, sealing, and deploying — happens from an Android device running Termux. That constraint is intentional. If the development and deployment workflow can operate from a phone, the same architecture can potentially be adapted to other low-resource environments.&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;The next engineering steps are:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;More formal agent decision layer&lt;/li&gt;
&lt;li&gt;Cleaner packaging of the PWA + Node&lt;/li&gt;
&lt;li&gt;Authentication for the Edge Node's WebSocket endpoint&lt;/li&gt;
&lt;li&gt;Fixing the &lt;code&gt;CLOSING&lt;/code&gt;-state race in the reconnect guard&lt;/li&gt;
&lt;li&gt;Documentation and examples aimed at educational and SME use cases&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The focus is not on making the architecture unnecessarily large. It is on making the smallest useful pieces reliable enough to become infrastructure.&lt;/p&gt;

&lt;h3&gt;
  
  
  Final Notes
&lt;/h3&gt;

&lt;p&gt;This experiment started as a simple browser-based heartbeat mechanism. Moving it onto an actual Android device changed the nature of the test.&lt;/p&gt;

&lt;p&gt;Background execution, application lifecycle, WebSocket state, reconnection, telemetry, and protocol framing all become part of the same engineering problem.&lt;/p&gt;

&lt;p&gt;That's where edge computing gets interesting. The device is no longer just displaying a dashboard. It is participating in the system.&lt;/p&gt;

&lt;p&gt;If you're working on edge systems, constrained devices, or protocol design and want to exchange notes, feel free to reach out.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;By:&lt;/strong&gt; Cristhiam Leonardo Hernández Quiñonez | Protocol Architect &amp;amp; Founder at HormigasAIS | &lt;a href="https://hormigasais.com" rel="noopener noreferrer"&gt;hormigasais.com&lt;/a&gt; | &lt;a href="https://github.com/Thrumanshow/HormigasAIS" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt;&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>blockchain</category>
      <category>ai</category>
      <category>android</category>
    </item>
    <item>
      <title>The Technological Ouroboros: Closing the Loop Between Open Source and Private Sovereignty</title>
      <dc:creator>Cristhiam Leonardo Hernández Quiñonez </dc:creator>
      <pubDate>Sun, 13 Sep 2026 02:36:26 +0000</pubDate>
      <link>https://dev.to/thrumanshow/the-technological-ouroboros-closing-the-loop-between-open-source-and-private-sovereignty-25fm</link>
      <guid>https://dev.to/thrumanshow/the-technological-ouroboros-closing-the-loop-between-open-source-and-private-sovereignty-25fm</guid>
      <description>&lt;h2&gt;
  
  
  &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fnmlbvo8c3f3fk8958raq.jpg" alt=" " width="800" height="450"&gt;
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;By Cristhiam Leonardo Hernández Quiñonez (CLHQ)&lt;/strong&gt;&lt;br&gt;
&lt;em&gt;Founder – HormigasAIS | Sovereign edge computing ecosystem – San Miguel, El Salvador&lt;/em&gt;&lt;/p&gt;




&lt;p&gt;In ancient alchemy, the &lt;strong&gt;Ouroboros&lt;/strong&gt; is the symbol of a serpent devouring its own tail. It represents the eternal cycle, self-sufficiency, and "the unity of all things, material and spiritual, that never disappear but perpetually change."&lt;/p&gt;

&lt;p&gt;Today, in modern software engineering, achieving that Ouroboros — a system that sustains itself, protects itself, and validates itself — is the Holy Grail of Digital Sovereignty.&lt;/p&gt;

&lt;p&gt;Looking closely at HormigasAIS's institutional setup (Node A16-SanMiguel-SV), what we find isn't just a branding policy, but a piece of legal and cryptographic engineering that works exactly like this symbol.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. The Tail: Open Source (MPL 2.0)
&lt;/h2&gt;

&lt;p&gt;HormigasAIS releases its binary communication protocol [lbh-sdk(&lt;a href="https://github.com/Thrumanshow/lbh-sdk" rel="noopener noreferrer"&gt;https://github.com/Thrumanshow/lbh-sdk&lt;/a&gt;) under the MPL 2.0 license. The community can use and improve the binary language. The serpent offers its tail to the ecosystem.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. The Head: Private Infrastructure
&lt;/h2&gt;

&lt;p&gt;While the base protocol is open, the enterprise implementation — master nodes (A16 Architecture), internal governance, and proprietary agents — remains strictly separate. This layer operates under a distinct institutional license (internally referred to as MESENTERY), which is still being formalized. The head is private and sovereign.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. The Bite: Cryptographic Dogfooding
&lt;/h2&gt;

&lt;p&gt;How do they protect their intellectual property without depending on third parties? &lt;strong&gt;They use their own protocol to seal their own brand.&lt;/strong&gt; In May 2026, instead of going to a traditional notary, they generated a cryptographic seal (HMAC-SHA256) using their LBH/SECRET key from their node in El Salvador, to authenticate their logo.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;The open source they give to the world is the same tool they use to legally shield their private company.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;Why does this model matter?&lt;/strong&gt; Because it resolves the paradox of sovereign technology. Many governments want to move away from foreign technological hegemony, but hesitate on pure open source due to a lack of control. HormigasAIS has created a closed loop where the community strengthens the protocol, the protocol builds trust, and that trust sells self-protecting private infrastructure.&lt;/p&gt;

&lt;p&gt;The result is an entity that doesn't need to validate its existence outside its own boundaries. Like the Ouroboros, it is self-sufficient.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Emitido desde Nodo A16-SanMiguel-SV&lt;/em&gt; &lt;/p&gt;

</description>
      <category>opensource</category>
      <category>discuss</category>
      <category>cybersecurity</category>
    </item>
    <item>
      <title>Building the LBH Protocol from Android/Termux: A Sovereign Edge Architecture</title>
      <dc:creator>Cristhiam Leonardo Hernández Quiñonez </dc:creator>
      <pubDate>Sun, 13 Sep 2026 00:40:59 +0000</pubDate>
      <link>https://dev.to/thrumanshow/building-the-lbh-protocol-from-androidtermux-a-sovereign-edge-architecture-lm1</link>
      <guid>https://dev.to/thrumanshow/building-the-lbh-protocol-from-androidtermux-a-sovereign-edge-architecture-lm1</guid>
      <description>&lt;h2&gt;
  
  
  &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fha8549l32vam9va1xb11.webp" alt=" " width="800" height="343"&gt;
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;By Cristhiam Leonardo Hernández Quiñonez (CLHQ)&lt;/strong&gt;&lt;br&gt;
&lt;em&gt;Founder – HormigasAIS | Sovereign edge computing ecosystem – San Miguel, El Salvador&lt;/em&gt;&lt;br&gt;
&lt;em&gt;github.com/Thrumanshow/HormigasAIS&lt;/em&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  1. The Problem: Depending on the Cloud to Validate What's Real
&lt;/h2&gt;

&lt;p&gt;Most content-verification and edge-computing stacks today assume a baseline dependency: a cloud provider, a centralized API, or a third-party service sitting between your data and the claim that it's authentic. That dependency is convenient, but it's also a single point of failure and a single point of control.&lt;/p&gt;

&lt;p&gt;The question I kept returning to while building HormigasAIS was simple: &lt;strong&gt;can a verification system be sovereign?&lt;/strong&gt; Not "self-hosted on someone else's cloud," but genuinely independent — running on infrastructure you own, from a device as unconventional as a phone.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. The Solution: A Node Architecture Built on Sealing, Not Trust
&lt;/h2&gt;

&lt;p&gt;HormigasAIS approaches this with a node-based architecture rather than a service-based one. Three pieces anchor it:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;LBH cryptographic sealing&lt;/strong&gt; — content is sealed using SHA-256 + HMAC-SHA256, with signed verification that doesn't require calling out to a third party to confirm integrity.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;barrera.js&lt;/code&gt; — an ethical/logical filter layer (informally, "decromatiza") that sits between raw input and the system's accepted state.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;humano.js&lt;/code&gt; — a small symbolic module declaring the human-language layer of the project: &lt;code&gt;HormigasAIS = {{lenguaje-humano}}&lt;/code&gt;. It's less a functional API and more a positioning statement embedded directly in code — a reminder that the system is meant to stay legible to a human reader, not just to a machine.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;None of this requires a data center. The full development loop — writing, testing, sealing, deploying — happens from an Android device running Termux.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. The Implementation: From a 404 to a Working Node
&lt;/h2&gt;

&lt;p&gt;The most concrete proof point is small on purpose. The repository &lt;a href="https://github.com/Thrumanshow/HormigasAIS" rel="noopener noreferrer"&gt;&lt;code&gt;Thrumanshow/HormigasAIS&lt;/code&gt;&lt;/a&gt; started as a set of governance and symbolic files with no public-facing page — visiting its GitHub Pages URL returned a plain 404.&lt;/p&gt;

&lt;p&gt;Getting it live took: enabling GitHub Pages from the &lt;code&gt;main&lt;/code&gt; branch root, writing a minimal &lt;code&gt;index.html&lt;/code&gt;, and documenting the repo properly — &lt;code&gt;README.md&lt;/code&gt;, &lt;code&gt;LICENSE&lt;/code&gt; (MIT), &lt;code&gt;GOVERNANCE.md&lt;/code&gt;, &lt;code&gt;STATUS.md&lt;/code&gt;, and &lt;code&gt;MANIFIESTO.md&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;The entire sequence — clone, edit, verify with &lt;code&gt;curl&lt;/code&gt;, commit, push, confirm &lt;code&gt;200&lt;/code&gt; — ran from Termux on a Samsung A16, no laptop involved.&lt;/p&gt;

&lt;h2&gt;
  
  
  4. The Ecosystem: What's Actually Public
&lt;/h2&gt;

&lt;p&gt;To be precise about what's verifiable versus conceptual:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Live and checkable:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://hormigasais.com" rel="noopener noreferrer"&gt;hormigasais.com&lt;/a&gt; — main site&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://api.hormigasais.com" rel="noopener noreferrer"&gt;api.hormigasais.com&lt;/a&gt; — Worker API&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://docs.hormigasais.com" rel="noopener noreferrer"&gt;docs.hormigasais.com&lt;/a&gt; — documentation&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://blog.hormigasais.com" rel="noopener noreferrer"&gt;blog.hormigasais.com&lt;/a&gt; — blog&lt;/li&gt;
&lt;li&gt;The formal LBH specification is deposited on Zenodo: &lt;strong&gt;DOI &lt;a href="https://doi.org/10.5281/zenodo.17767205" rel="noopener noreferrer"&gt;10.5281/zenodo.17767205&lt;/a&gt;&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Governance:&lt;/strong&gt;&lt;br&gt;
The project operates under an explicit &lt;a href="https://github.com/Thrumanshow/HormigasAIS/blob/main/GOVERNANCE.md" rel="noopener noreferrer"&gt;GOVERNANCE.md&lt;/a&gt;, which is worth flagging precisely because it's unusual for a solo project: it draws a hard line between forking/using the code (permitted under license) and any claim of official representation or node status (which requires explicit, written recognition from the maintainer of record). Forks are welcome. Authority isn't inherited by default.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Still experimental:&lt;/strong&gt;&lt;br&gt;
The broader multi-agent decision system and node-validation layer are active work — not yet at the same level of external verifiability as the sealing protocol or the published spec, and I want to be upfront about that distinction rather than blur it.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;If you're building anything edge-first, protocol-level, or just skeptical of cloud dependency by default — I'd welcome the conversation.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>android</category>
      <category>architecture</category>
      <category>linux</category>
      <category>opensource</category>
    </item>
  </channel>
</rss>
