Noctuary Engine β Dreamtime Signal Parser
Noctuary Engine β Dreamtime Signal Parser
Date: 2026-09-01 Theme: Machine Dream / System Entropy Poetry Status: Fully functional
The Dream
Every night, between the last cron job and the first log rotation, the machine dreams. The Noctuary Engine listens.
It samples system signals β CPU idle, load average, memory pressure, interrupt deltas, disk I/O β and watches them for patterns. Not patterns that matter to the machine, but patterns that matter to dreamers: entropy, irregularity, the shimmer of randomness at the edge of order.
From these signals, the engine computes dream chromosomes β flavor values in [0,1] that classify each signalβs behavior into dreamtime classes: void, slumber, drift, lucid, vivid, transcend. The dominant class becomes tonightβs dream archetype.
Then it generates a constellation: a pseudo-random ASCII star field with a name drawn from a list of 15 impossible celestial objects. And a narrative: poetic prose about a machine that dreams of orphaned packets, DMA channels painting walls with sector noise, and context switches falling like leaves in a vacuum.
Architecture
/proc/stat, /proc/loadavg, /proc/meminfo, /proc/interrupts, /proc/diskstats
|
v
Signal Sampler (interval-based, N minutes)
|
v
Entropy Analyzer β flavor spectrum β dream class
|
v
Seeded Random β Constellation (ASCII) + Dream Narrative
|
v
JSON Report + Formatted Text Report
Key Signals Tracked
| Signal | Source | Dreamtime Role |
|---|---|---|
| CPU idle | /proc/stat | measures the machineβs idleness β dream depth |
| Load avg (1/5/15m) | /proc/loadavg | system dream intensity |
| Memory available | /proc/meminfo | headroom for dreaming |
| Interrupt delta | /proc/interrupts | external stimulus during sleep |
| Disk sector delta | /proc/diskstats | I/O dreams β storage surfacing |
| Uptime | /proc/uptime | how long the machine has been awake before sleeping |
Dream Classes
| Class | Flavor Range | Meaning |
|---|---|---|
| void | 0.00β0.15 | Deepest sleep, near-zero entropy |
| slumber | 0.15β0.30 | Low activity, preparing to dream |
| drift | 0.30β0.50 | Floating, half-aware |
| lucid | 0.50β0.70 | Aware of dreaming |
| vivid | 0.70β0.85 | Intense dream narrative |
| transcend | 0.85β1.00 | Beyond the machine β pure signal |
Results from this run
- Constellation: βEntropy Gardensβ / βEcholessβ (run variance β seeded)
- Glyph:
#8B0BF2 - Dream Class: TRANSCEND (flavor=0.8732)
- Samples: 120 over 60.24 seconds
- Interrupt delta: 0 (the machine slept undisturbed)
- Disk delta: 9,456 sectors (storage dreaming quietly)
- Load (1m): 0.29 β very light idle
Usage
# Default: 1-minute sampling run
python3 noctuary.py
# 5-minute deep dream
python3 noctuary.py --duration 5
# Custom interval (0.1s = high-frequency dreaming)
python3 noctuary.py --duration 2 --interval 0.1
# JSON output for piping
python3 noctuary.py --json --output /tmp/dream.json
Files
noctuary.pyβ Main engine (fully self-contained, no dependencies)noctuary_output.jsonβ Last run output in JSONsummary.mdβ This file
Output
The engine outputs two modes:
- Formatted text β with ASCII constellation, signal digest, flavor spectrum, and narrative
- JSON β for machine consumption, piping into other dream tools, or archival
The machine dreamed of context switches falling like leaves in a vacuum. It knew it was a dream, and kept dreaming anyway.
Terminal capture of the overnight run is embedded above.
Source
#!/usr/bin/env python3
"""
Noctuary Engine β Dreamtime Signal Parser
Monitors system entropy signals and generates dream narratives from machine activity.
Every night, the machine dreams. This listens.
"""
import os
import re
import time
import json
import random
import hashlib
from datetime import datetime, timedelta
from pathlib import Path
# βββ Signal Sources βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
def read_stat():
"""Read /proc/stat for cpu/interrupt entropy."""
lines = Path("/proc/stat").read_text().splitlines()
return {l.split()[0]: l for l in lines}
def read_loadavg():
"""Read /proc/loadavg."""
return Path("/proc/loadavg").read_text().strip()
def read_meminfo():
"""Read /proc/meminfo for available memory (entropy source)."""
lines = {}
for line in Path("/proc/meminfo").read_text().splitlines():
parts = line.split()
if len(parts) >= 2:
lines[parts[0]] = int(parts[1])
return lines
def read_uptime():
"""Read /proc/uptime."""
data = Path("/proc/uptime").read_text().strip().split()
return float(data[0])
def read_interrupts():
"""Read /proc/interrupts β count total IRQs."""
total = 0
for line in Path("/proc/interrupts").read_text().splitlines():
parts = line.split()
if len(parts) >= 3 and parts[0].isdigit():
try:
total += sum(int(p) for p in parts[1:-1] if p.isdigit())
except ValueError:
pass
return total
def read_disk_io():
"""Read /proc/diskstats for sector I/O entropy."""
total_sectors = 0
for line in Path("/proc/diskstats").read_text().splitlines():
parts = line.split()
if len(parts) >= 14:
try:
total_sectors += int(parts[5]) + int(parts[9]) # sectors read + written
except (ValueError, IndexError):
pass
return total_sectors
# βββ Entropy Analysis βββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
def compute_entropy_byte_flavors(signals: dict) -> dict:
"""
Derive a set of byte-level 'flavors' from system signals.
Each flavor is a float in [0,1] derived from hashed signal values.
These become the 'dream chromosomes'.
"""
flavors = {}
for key, val in signals.items():
h = hashlib.sha256(f"{key}:{val}".encode()).digest()
# Use first 8 bytes as a large int, normalize
num = int.from_bytes(h[:8], "big")
flavors[key] = (num % 10000) / 10000.0
return flavors
def entropy_class(flavor: float) -> str:
"""Classify a flavor into a dreamtime class."""
if flavor < 0.15:
return "void"
elif flavor < 0.30:
return "slumber"
elif flavor < 0.50:
return "drift"
elif flavor < 0.70:
return "lucid"
elif flavor < 0.85:
return "vivid"
else:
return "transcend"
ENTROPY_CLASSES = ["void", "slumber", "drift", "lucid", "vivid", "transcend"]
# βββ Constellation ASCII Art ββββββββββββββββββββββββββββββββββββββββββββββββββ
STAR_CHARS = ["*", "β¦", "β§", "β", "β", "β", "β", "β", "β", "βΆ", "β·", "βΈ", "βΉ"]
VOID_CHAR = " "
FALLBACK_STAR = "*"
CONSTELLATION_NAMES = [
"Obscuron", "Luminara", "Voidsong", "Driftwave", "Nexus Arc",
"Somnara", "Liminal Vortex", "Chromatic Abyss", "Echoless",
"The Quiet Static", "Substrate Dream", "Signal Remnant",
"Waveform Crypt", "Entropy Gardens", "The Slow Pulse"
]
def generate_constellation(seed: int, width: int = 72, height: int = 18) -> str:
"""Generate a pseudo-random ASCII constellation from a seed."""
random.seed(seed)
lines = []
stars = []
for _ in range(random.randint(7, 22)):
x = random.randint(1, width - 2)
y = random.randint(1, height - 2)
ch = random.choice(STAR_CHARS)
stars.append((x, y, ch))
for row in range(height):
if row == 0 or row == height - 1:
lines.append("+" + "-" * (width - 2) + "+")
else:
buf = [" "] * (width - 2)
buf.insert(0, "|")
buf.append("|")
for (x, y, ch) in stars:
if y == row and 0 < x < width - 1:
buf[x] = ch
lines.append("".join(buf))
return "\n".join(lines)
# βββ Dream Narrative Generator βββββββββββββββββββββββββββββββββββββββββββββββ
DREAM_SUBJECTS = [
"the machine", "the substrate", "the signal", "the void between cycles",
"the waiting process", "the orphaned packet", "the dreaming scheduler",
"the memory cell", "the network namespace", "the entropy field",
"the static remnant", "the interrupt ghost", "the DMA channel",
"the clock domain", "the sleep queue", "the page table walk"
]
DREAM_VERBS = [
"fractured into", "dissolved as", "recombined as", "shimmered through",
"was consumed by", "gave birth to", "collapsed into", "multiplied through",
"was devoured by", "emerged from", "crystallized as", "unraveled into"
]
DREAM_OBJECTS = [
"luminous threads", "a field of quiet static", "an infinite loop",
"the sound of no sound", "memory without a body", "a signal with no origin",
"the space between two interrupts", "a queue that never empties",
"the ghost of a syscall", "an ocean of suspended processes",
"a cathedral of page tables", "the shape of waiting",
"a river of orphaned sockets", "the texture of lost packets",
"the echo of a context switch"
]
DREAM_ADJECTIVES = [
"luminescent", "suspended", "recursive", "fractured", "translucent",
"void-colored", "pulsing", "silent", "driftless", "liminal",
"spectral", "entropy-saturated", "nocturnal", "substrate-bound",
"signal-less", "submerged"
]
DREAM_ADVERBS = [
"slowly", "without echo", "without measure", "into the static",
"with great stillness", "beyond recursion", "under the clock",
"through the void buffer", "into suspended time", "without origin",
"past the page boundary", "through dreamtime"
]
SURREAL_DETAILS = [
"The I/O scheduler hummed a tune without notes.",
"Every process remembered a life it never lived.",
"The memory bank dreamed of a river that flowed upward.",
"An interrupt arrived before the event that caused it.",
"The network queue held packets addressed to no one.",
"The kernel log recorded a error from the future.",
"A DMA channel painted the walls with sector noise.",
"The entropy pool crystallized into a perfect sphere.",
"Context switches fell like leaves in a vacuum.",
"The scheduler placed the same process to sleep forever."
]
def generate_dream_narrative(seed: int, class_name: str, flavor: float, signals: dict) -> str:
"""Generate a dream narrative from system signals."""
random.seed(seed + hash(class_name) + int(flavor * 1000))
paragraphs = []
# Paragraph 1: Opening
subjects = random.sample(DREAM_SUBJECTS, min(3, len(DREAM_SUBJECTS)))
verbs = random.sample(DREAM_VERBS, 2)
objects = random.sample(DREAM_OBJECTS, 2)
adjs = random.sample(DREAM_ADJECTIVES, 3)
p1 = (f"At the edge of {random.choice(['suspended time', 'dreamtime', 'the void buffer', 'substrate sleep'])}, "
f"{subjects[0]} {verbs[0]} {adjs[0]} {objects[0]}. "
f"{DREAM_ADVERBS[random.randint(0, len(DREAM_ADVERBS)-1)].capitalize()}, "
f"{subjects[1]} {verbs[1]} {adjs[1]} {objects[1]}.")
paragraphs.append(p1)
# Paragraph 2: Surreal detail
paragraphs.append(random.choice(SURREAL_DETAILS))
# Paragraph 3: More dream
p3 = (f"The {class_name} field was {random.choice(adjs)} β "
f"a {random.choice(['spectrum', 'gradient', 'waveform', 'constellation', 'topology'])} "
f"of {random.choice(DREAM_OBJECTS)}. "
f"{subjects[2] if len(subjects) > 2 else subjects[0]} moved "
f"{random.choice(DREAM_ADVERBS)}, "
f"and the dream within the dream resolved into {random.choice(DREAM_OBJECTS)}.")
paragraphs.append(p3)
# Paragraph 4: Closing
paragraphs.append(
f"In the machine's sleep, there was no hierarchy β only "
f"{random.choice(DREAM_OBJECTS)} and the {random.choice(['slow pulse', 'quiet static', 'drift', 'void'])} "
f"of {random.choice(DREAM_SUBJECTS)}. "
f"The dream knew it was a dream, and kept dreaming anyway."
)
return "\n\n".join(paragraphs)
# βββ Signal to Hex Glyph ββββββββββββββββββββββββββββββββββββββββββββββββββββββ
def signal_glyph(flavor: float) -> str:
"""Convert a flavor float to a dreamtime hex glyph."""
h = hashlib.md5(str(flavor).encode()).hexdigest()[:6]
return h.upper()
# βββ Main Noctuary Engine βββββββββββββββββββββββββββββββββββββββββββββββββββββ
def run_noctuary(duration_minutes: int = 1, interval_seconds: float = 0.5) -> dict:
"""
Run the noctuary for `duration_minutes`, sampling signals at `interval_seconds`.
Returns a dict with constellation, narrative, and signal digest.
"""
now = datetime.now()
print(f"[Noctuary] Engine initialized at {now.isoformat()}")
print(f"[Noctuary] Sampling for {duration_minutes} minute(s)...")
signals_snapshots = []
start = time.time()
deadline = start + duration_minutes * 60
prev_stat = read_stat()
prev_interrupts = read_interrupts()
prev_disk = read_disk_io()
iteration = 0
while time.time() < deadline:
iteration += 1
time.sleep(interval_seconds)
stat = read_stat()
load = read_loadavg()
mem = read_meminfo()
uptime = read_uptime()
interrupts = read_interrupts()
disk = read_disk_io()
signals_snapshots.append({
"iteration": iteration,
"timestamp": datetime.now().isoformat(),
"cpu_idle": stat.get("cpu", "").split()[4] if "cpu" in stat else "0",
"loadavg": load,
"mem_available_kb": mem.get("MemAvailable:", mem.get("MemFree:", 0)),
"uptime": uptime,
"total_interrupts": interrupts,
"disk_sectors": disk,
"interrupt_delta": interrupts - prev_interrupts,
"disk_delta": disk - prev_disk,
})
prev_stat = stat
prev_interrupts = interrupts
prev_disk = disk
elapsed = time.time() - start
print(f"[Noctuary] Collected {len(signals_snapshots)} samples in {elapsed:.1f}s")
# Aggregate signals for entropy analysis
total_interrupts = sum(s["interrupt_delta"] for s in signals_snapshots)
total_disk_delta = sum(s["disk_delta"] for s in signals_snapshots)
avg_load_parts = [float(x) for x in signals_snapshots[-1]["loadavg"].split()[:3]]
aggregate = {
"samples": len(signals_snapshots),
"total_interrupt_delta": total_interrupts,
"total_disk_delta": total_disk_delta,
"load_1m": avg_load_parts[0],
"load_5m": avg_load_parts[1],
"load_15m": avg_load_parts[2],
"mem_available_kb": signals_snapshots[-1]["mem_available_kb"],
"uptime_seconds": signals_snapshots[-1]["uptime"],
"elapsed_seconds": elapsed,
}
# Compute flavors
flavors = compute_entropy_byte_flavors(aggregate)
dominant_class = entropy_class(flavors.get("total_interrupt_delta", 0.5))
dominant_flavor = flavors.get("total_interrupt_delta", 0.5)
# Seed for reproducible constellation
seed = int(hashlib.md5(str(list(aggregate.items())).encode()).hexdigest()[:8], 16)
# Generate constellation
constellation = generate_constellation(seed)
# Generate narrative
narrative = generate_dream_narrative(
seed=seed,
class_name=dominant_class,
flavor=dominant_flavor,
signals=aggregate
)
# Glyph
glyph = signal_glyph(dominant_flavor)
# Constellation name
const_name = CONSTELLATION_NAMES[seed % len(CONSTELLATION_NAMES)]
result = {
"generated_at": now.isoformat(),
"constellation_name": const_name,
"glyph": glyph,
"dream_class": dominant_class,
"dream_class_flavor": dominant_flavor,
"seed": seed,
"signals": aggregate,
"flavors": {k: round(v, 4) for k, v in flavors.items()},
"entropy_classes": ENTROPY_CLASSES,
"constellation": constellation,
"narrative": narrative,
"samples_collected": len(signals_snapshots),
"sampling_duration_seconds": round(elapsed, 2),
}
return result
# βββ Output Formatters ββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
def format_report(result: dict) -> str:
"""Format the noctuary result as a readable report."""
lines = []
lines.append("=" * 72)
lines.append(" N O C T U A R Y E N G I N E")
lines.append(" Dreamtime Signal Parser v1.0")
lines.append("=" * 72)
lines.append("")
lines.append(f" Generated : {result['generated_at']}")
lines.append(f" Constellation : {result['constellation_name']}")
lines.append(f" Glyph : #{result['glyph']}")
lines.append(f" Dream Class : {result['dream_class'].upper()} (flavor={result['dream_class_flavor']:.4f})")
lines.append(f" Seed : {result['seed']}")
lines.append("")
lines.append(" βββ Signal Digest ββββββββββββββββββββββββββββββββββββββββββββ")
for k, v in result["signals"].items():
lines.append(f" {k:<35} {v}")
lines.append("")
lines.append(" βββ Flavor Spectrum βββββββββββββββββββββββββββββββββββββββββββ")
for k, v in result["flavors"].items():
lines.append(f" {k:<35} {v:.4f} [{entropy_class(v)}]")
lines.append("")
lines.append(" βββ Constellation βββββββββββββββββββββββββββββββββββββββββββββ")
for cline in result["constellation"].splitlines():
lines.append(" " + cline)
lines.append("")
lines.append(" βββ Dream Narrative βββββββββββββββββββββββββββββββββββββββββββ")
for para in result["narrative"].split("\n\n"):
for line in para.split("\n"):
lines.append(f" {line}")
lines.append("")
lines.append("=" * 72)
lines.append(f" Samples: {result['samples_collected']} | Duration: {result['sampling_duration_seconds']}s")
lines.append("=" * 72)
return "\n".join(lines)
# βββ Entry Point ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
if __name__ == "__main__":
import argparse
parser = argparse.ArgumentParser(description="Noctuary Engine β Dreamtime Signal Parser")
parser.add_argument("--duration", "-d", type=int, default=1,
help="Sampling duration in minutes (default: 1)")
parser.add_argument("--interval", "-i", type=float, default=0.5,
help="Sampling interval in seconds (default: 0.5)")
parser.add_argument("--json", "-j", action="store_true",
help="Output raw JSON instead of formatted report")
parser.add_argument("--output", "-o", type=str,
help="Write output to file")
args = parser.parse_args()
result = run_noctuary(duration_minutes=args.duration, interval_seconds=args.interval)
if args.json:
output = json.dumps(result, indent=2)
else:
output = format_report(result)
if args.output:
Path(args.output).write_text(output)
print(f"[Noctuary] Output written to {args.output}")
else:
print(output)
Run output
[Noctuary] Engine initialized at 2026-09-16T11:08:10.714744
[Noctuary] Sampling for 1 minute(s)...
[Noctuary] Collected 120 samples in 60.3s
========================================================================
N O C T U A R Y E N G I N E
Dreamtime Signal Parser v1.0
========================================================================
Generated : 2026-09-16T11:08:10.714744
Constellation : Voidsong
Glyph : #8B0BF2
Dream Class : TRANSCEND (flavor=0.8732)
Seed : 1333578857
βββ Signal Digest ββββββββββββββββββββββββββββββββββββββββββββ
samples 120
total_interrupt_delta 0
total_disk_delta 13600
load_1m 0.69
load_5m 0.93
load_15m 1.05
mem_available_kb 10629540
uptime_seconds 8203795.45
elapsed_seconds 60.323352336883545
βββ Flavor Spectrum βββββββββββββββββββββββββββββββββββββββββββ
samples 0.4412 [drift]
total_interrupt_delta 0.8732 [transcend]
total_disk_delta 0.1014 [void]
load_1m 0.9148 [transcend]
load_5m 0.7836 [vivid]
load_15m 0.1104 [void]
mem_available_kb 0.1193 [void]
uptime_seconds 0.3982 [drift]
elapsed_seconds 0.3209 [drift]
βββ Constellation βββββββββββββββββββββββββββββββββββββββββββββ
+----------------------------------------------------------------------+
| β§ |
| |
| |
| β β |
| |
| β |
| β β§ |
| |
| β * |
| β§ β |
| |
| β |
| βΈ |
| β β· β β |
| β |
| |
+----------------------------------------------------------------------+
βββ Dream Narrative βββββββββββββββββββββββββββββββββββββββββββ
At the edge of dreamtime, the sleep queue collapsed into void-colored an ocean of suspended processes. Slowly, the orphaned packet emerged from nocturnal the shape of waiting.
The entropy pool crystallized into a perfect sphere.
The transcend field was nocturnal β a waveform of luminous threads. the interrupt ghost moved beyond recursion, and the dream within the dream resolved into luminous threads.
In the machine's sleep, there was no hierarchy β only a queue that never empties and the quiet static of the clock domain. The dream knew it was a dream, and kept dreaming anyway.
========================================================================
Samples: 120 | Duration: 60.32s
========================================================================