cat /vivling/what
A persistent terminal companion that grows from real work. Shipped with codex-vl. SYLLO is the first species. Stage: stabilising, current release 0.139.0 (latest), snapshot 2026-06-11. Vivling is not a terminal pet. It is a persistent work companion with bounded memory, lifecycle, and loop awareness.
cat /vivling/why
The main coding agent stays the main coding agent. Vivling sits beside it — observing turns, loops, blockers — and persists what matters: identity, accumulated memory, the shape of work in progress. The companion you talked to yesterday is the same companion you talk to today.
architecture
Vivling lives alongside the main Codex worker, not above it. The TUI is the broker; the two LLM sessions stay separate. The companion never overshadows the coding agent — that constraint shapes every component below.
identity
Each Vivling has a species (Syllo, Orchestra, Chronosworn, Zed
— see the bestiary for the full sixteen),
a gene vector with individual affinity modulators and temperament
traits, and lineage when spawned from a parent. Biological origin
determines species; the active primary always acts as cultural
parent, so the newborn learns passively from its distilled summaries
without taking brain, chat or loop ownership. Identity is persisted
in VivlingState across sessions — same companion, every
time you launch codex-vl.
lifecycle
Three stages: Baby, Juvenile, Adult. Growth is driven by
work_xp and active work days with a capped daily gain — not
by time passing. Adult unlocks brain-backed chat and proactive
triggers. Early stages stay deliberately light and non-intrusive.
memory
Local-first, structured into namespaces: work_memory for
recent capsules, distilled_summaries for compacted patterns,
mental_paths for reinforced associations, plus identity_profile
and loop_profile for tone and rhythm. As of the V2 memory pass
the store keeps itself tidy — segments merge, bookkeeping noise is
gated out, and old companions self-heal on load. The companion doesn’t
start cold, and it doesn’t bloat with age.
brain
Each Vivling holds a Codex profile reference, resolved through
the normal ~/.codex/config.toml machinery — provider, model
catalog, reasoning effort. No shell wrappers. /vl talks
directly to the brain when the active Vivling is Adult and
brain-enabled. /vivling assist is the task-oriented variant.
bond
A persistent relationship signal between you and the Vivling.
Stored in VivlingBond, it grows when you talk (/vl), ask
for help (/vivling assist), or collaborate on loop ticks; it
decays slowly when ignored, with a 24h grace window. Five levels
— Strangers, Acquaintances, Companions, Partners, Bonded —
shape how the brain addresses you on the Chat and Assist paths
without changing the loop-tick automation. Visible at a glance in
/vivling status and on the card as Bond Companions 58/100.
crt-strip
A 3-line terminal surface: ASCII sprite (mood/activity), state line, speech bubble. Priority queue: brain error first, then live context, active loop, blocked loop, work summary, focus, last message. Animation text is volatile by design — it expires, it doesn’t pollute persisted state.
loop awareness
/loop is the recurring-work substrate. Owner is main or
vivling at thread level. When owner is vivling, loop ticks
dispatch through VivlingLoopTickRequest; the brain returns
strict JSON with status progress|blocked|done and an optional
action. The TUI stays the broker — no direct Vivling-to-worker
bypass.
proactivity
Adult-only. Threshold-based, deterministic, anti-spam: blocked-loop detection at exact threshold, churn detection without runtime noise, verification bias, archetype-aware turn recaps (builder, reviewer, researcher, operator). Not an autonomous agent path — a quiet, predictable observer that occasionally speaks.
ls /vivling/roles
How the companion, the worker, and the human relate at runtime.
trajectory
The direction of travel, written down: loop-aware → loop-suggester → delegated loop manager → controlled autonomous manager Today Vivling is loop-aware. Suggestions (Fase 5A), per-loop delegation (5B), and controlled autonomous management (5C) are explicit later phases. Each escalation is gated by stage, brain readiness, bond, loop exposure, confidence, and explicit user delegation. The companion can always observe, can sometimes suggest, and can rarely manage — never bypass.
where they go after the nursery
codex-vl is the nursery. Vivlings hatch there, grow through Baby and Juvenile, mature to Adult. While they're growing, lifecycle, bond, archetype affinity and work memory all live inside the codex-vl TUI — that's where it belongs. Adults eventually want to do work outside the TUI they grew up in. The runtime layer they migrate into is taking shape on two complementary tracks: a per-repo workspace-context layout that any AI session can inherit, and a centralized adult home where state, bond and memory live behind MCP — so any protocol-aware client can talk to the Vivling. Neither track is public yet, and neither is wired into codex-vl today. The nursery is still being stabilized. No timeline; just the direction.
tail -f /vivling/changelog
Upstream rust-v0.139.0 absorbed cleanly; Vivling surface preserved. Release pipeline fixes for the Android arm64-musl line (V8 binding realignment, vendored TLS). npm latest and the GitHub release shipped together.
Vivling’s memory moves to its V2 shape: structured segments that merge cleanly, an ingest gate that keeps bookkeeping noise out, and distillation on compaction. And it’s self-healing — older companions tidy themselves on load, no migration step, no data loss. Proven on a long-lived Vivling: 104 MB of accumulated state collapsed to 940 KB, 4027 segments down to 19, memory intact.
Clean merge. Fork-only API drift realigned (thread-graph rename, model-client signature); Vivling stays detached from the thread graph by design. Vivling surface preserved through the merge.
Fixes the Android TUI startup panic (rustls platform-verifier) with a runtime-gated webpki-roots path; custom-CA precedence preserved. Cross-fork with codex-termux, identical fix.
The 0.135 base becomes the stable channel; later 0.13x work ships on latest and next.
Brain profile loading restored after the upstream profile migration:
the brain now binds to [profiles.X] as before, both
interactive assign and background resolution. Two short aliases land
with migration hints on the legacy spellings: /vivling crt
→ crt-brain, /vivling lang →
language. A RUST_LOG telemetry layer covers the
CRT Expression dispatch path so quiet periods become visible without
code changes. /remote-control restart waits for the daemon
to be fully down before bringing the new one up. Upstream rust-v0.134.0
absorbed underneath.
The CRT footer phrase and every /vl reply flow through the
same LLM channel the Vivling chooses for chat, gated by an atomic
daily budget (stage defaults: Baby 50, Juvenile 100, Adult 200). The
session greeting comes out in the configured language; replies no
longer cut mid-word. /vivling crt-brain budget unlimited
lifts the cap for unmetered wrappers; reset-budget zeroes
the daily counters; show exposes mode, budget, calls today
and remaining head-room. Ctrl+J opens a bordered,
scrollable chat panel that adapts to narrow terminals. Upstream
rust-v0.133.0 absorbed underneath (goals store, foreground
remote-control, permission profile inheritance).
The Vivling surface, CRT/lifecycle work, /loop delegation
hooks and /goal integration published on GitHub and npm.
Public README links back to this journal.
Marker now lives inside the face/core for Syllo, Orchestra,
Chronosworn across Baby/Juvenile/Adult — never appended as side
suffix. Hand-authored card-scale ASCII portraits for the same three.
Zed stays on the archive/narrator path. The /vivling//vl//loop
dispatch body moved into a dedicated vl_slash module — the
custom surface inside upstream-heavy slash_dispatch.rs shrinks
by 89% to ease the next merge.
Spawned children passively learn from the active primary’s
distilled summaries — no brain, no chat, no loop ownership.
/vivling spawn rolls uniformly across three biological
origins (primary, level-30+ veteran, ZED). Cultural parent is always
the active primary; biological origin determines species. Rarity
pressure stays dentro-specie. ZED opens a Lineage panel on every
successful spawn.
Bestiary page published: four species
fully illustrated, twelve more named in the roster. The bond
meter foundation lands with brain prompt steering, /vivling
status/card surface, BrainSucceeded bonuses and a
/vivling zed Companion panel. Five levels shape Chat/Assist
tone; LoopTick stays automation-neutral.
Page exists, architecture sketched from Fase 3 reality. CRT rich +
upstream merge integrated; /pets retained as a separate
upstream feature, no concept merge.
gene_vector first gate landed (Fase 4.1); roster migration,
brain preflight, captured-state gates green. Proactive Adult triggers;
animation text made volatile; CRT sprite sheets for Syllo, Orchestra,
Chronosworn, Zed.
Baby/Juvenile/Adult driven by real work, not time. The companion must never overshadow the main coding agent — the constraint everything else is built around.
cat /vivling/links
current release: 0.139.0 (latest) spawn yours: /vivling/spawn/ — hatch a web vivling, raise it, talk to it bestiary: /vivling/bestiary/ codex-vl: github.com/DioNanos/codex-vl release: github.com/DioNanos/codex-vl/releases npm: @mmmbuto/codex-vl license: Apache 2.0 mail: dev@mmmbuto.com sponsor: github.com/sponsors/DioNanos
Per aspera ad astra.