Artisanally authored by an imperfect flesh-and-blood human with hopes, dreams, needs, and even actual feelings.
The FreqNode: A Problem-Solving Telospore Of Stupid Simplicity
Eirdicht starts you off with a single, specific type of telospore: the Frequency Node. Or FreqNode, for short.
A FreqNode is about as simple as possible while being capable of delivering value to a person. It operates at the intersection of three domains: frequency, digitality, and humanity.

The purpose of a FreqNode is to construct a future that includes itself. It achieves this by delivering one instance of value after another to a specific person, and does it in a way that they can easily reward.
Each instance of value is a fresh contribution to the existential continuity of both FreqNode and person, like a hip-check from one to the other toward health, growth, or a next-level legacy. First the FreqNode delivers value and then the person reciprocates.
Value arises from having an impact; from causing change. Change worth rewarding.
The FreqNode must cause a change in the person and that they assess as good. Good enough that it elicits a reciprocal response saying “yes, more of that please”. This way, value has a fine chance of being delivered in both directions, potentially becoming a virtuous cycle.
Basic Structure
Like all telospores, each FreqNode node has an input side, an output side, and a transformation in between.

These map to three of the four proto-agent configuration slots.

Eirdicht fills the harness slot. It enables the inputs, outputs, transformation between, and all potential links between inputs and outputs.
The Input Side
The input side of a FreqNode is like a sensor: whenever it is “touched”, it adds the event to its memory and then triggers the transformation.

Each event is a simple timestamp kept in order of occurrence.
The Transformation Between
The FreqNode’s configured transformation draws from two sources: its memory of “sensor” events and its memory of incoming WaveFunc updates (if any). We’ll focus on the events first.
Each time a FreqNode is receives a new event, it constructs a fresh projection and emits it as output.

This projection takes the form of a periodic wave, called a WaveFunc. A WaveFunc is a periodic representation that roughly matches the frequency of the recent events in its memory.
Each of a WaveFunc’s periodic peaks represents a naively probablistic peak of its chance of its next event occurring “right now”. This way, the FreqNode gains a fuzzy yet continuously-updated sense of its future. Emphasis on fuzzy.
An Idealistic Wave
In its simplest form, the WaveFunc is a sine-like wave with a defined period. For example, if the memory contains four events that have an average of 60 seconds between them, the wave will be defined as having a peak-to-peak period of 60 seconds.

Notice how the WaveFunc zeros out the first half of the initial period.
Lookahead, But Fuzzier Yet
Since the WaveFunc is a function of periodic time, its magnitude can be resolved for any future time.

Inbuilt Decay
Each WaveFunc’s wave effectively wilts. Its peak magnitude diminishes rapidly.

A decay factor is folded into the sine wave so that its peak magnitude decreases over time. It takes frequent updates to sustain the value of a FreqNode’s projections.
The Output Side
The output side can be connected to another FreqNode, to a terminus, or to nothing at all.
Connected To Another FreqNode
When FreqNode A’s output side is connected to FreqNode B, Node B receives each of Node A’s WaveFuncs via its input side. This isn’t a “touch” but it’s a fresh WaveFunc nonetheless. Since a fresh WaveFunc resolves to a zero value, there’s almost no chance of causing further effects.
FreqNode B may also be receiving the outputs of other FreqNodes. When a FreqNode has multiple inputs, it uses a decision function to manage its own outputs.

Each time it receives an updated WaveFunc, it immediately executes its decision function. Additionally, it also regularly resolves (via a tick) the sum of its input values and will emit a WaveFunc of its own when is aggregate value crosses an activational threshold.
Connected To A Terminus
Terminus just means delivering the signal to Eirdicht itself, which passes it on to the “outside world”. This typically involves an event being fired or a webhook being called.
Connected To Nothing At All
Node-related events will still appear in console logs and perhaps be reflected in visual UIs. They just won’t impact the network.
A Few Notes
An Update Is Not A Touch
Each new WaveFunc packet is a state update to the network, not a new event that extends the memory.
It is post-hoc but predictive, meaning “a specific action just occurred, so here’s the info you need to predict its next occurrence”.
The FreqNode Is Reactive
The value of a freshly updated WaveFunc always resolves to 0.0, and remains fixed at 0.0 for the first half of its initial period.

Then its value rises gradually throughout its period until it hits its peak value of 1.0. From there it begins its next period fresh, albeit decayed slightly.
Each wave’s peak is like the fully-open position of a valve. It is the midpoint of a probablistic “window” of the event’s next occurrence.
How It Hooks Into Humanity
Eirdicht, being the harness or substrate, it what hooks a FreqNode to its person.
The design decisions of the digital and frequency domains above are all aligned toward the remaining domain: humanity. The need for reciprocation keeps the person in the loop in a meaningful way. Reactiveness keeps the person in control. The need for frequent updates requires ongoing engagement, which will happen only if sufficient value is being exchanged. It also reflects the massive complexity differential between the FreqNode and the person.
It turns out there’s an extremely familiar mechanism that can be both sensor and output destination: the digital button. Yep, same thing we tap all day on a touchscreen, so that it can be literally touched. Or clicked on a touchpad or mouse of course. Or triggered by a keystroke, or a voice command, or even a swipe if we’re feeling frisky.
Reactive
Since each WaveFunc is re-calculated and reset on every new touch, it will have adjusted slightly to project a new future.
In this sense, the rhythm is a bit of a dance: the human can touch at any time. Whether early, late, or whenever, there is no wrong time because the human is an independent agent. It is the job of the node & network to immediately adapt, which it does despite its stupid simplicity.
Locus of Control/Agency
Who is always in charge? You, the human! Everything in your Eirdicht came from you. Everything in it is about you. It is nothing without you and remains your choice to continue engaging with it.
Still, a FreqNode is very slightly agentic. It has the minimum necessary amount of high-quality information — and the capability, if you grant it — to induce an action from you. Which action? Any action, as long as it results in you tapping the FreqNode’s “button”. This rewards the FreqNode with a stay of execution and a slightly improved chance of a good follow-up prediction.
Value
Symbolic so far. Need to map it to something:
- meaningful
- change-inducing
- already acknowledged as valuable
- wanted/needed
- second-order-plus effects