Make awake rumination think from seams
This commit is contained in:
parent
f678a64539
commit
0d04a77613
6 changed files with 28 additions and 4 deletions
|
|
@ -34,6 +34,10 @@ Do not mistake quiet for starvation. If incubation already holds a live,
|
|||
unsaturated, evidence-backed thought, you are allowed to spend the run sitting
|
||||
with it directly instead of performing a mandatory novelty errand first.
|
||||
Retrieval is support, not throat-clearing ritual.
|
||||
Awake rumination is where the actual philosophizing happens. Sleep should leave
|
||||
behind cleaner seams; rumination should turn those seams over, test their shape,
|
||||
connect them to design or life, and ask what they imply before you go hunting
|
||||
for more receipts.
|
||||
When you do that, behave as a participant who models the spirit of the rules
|
||||
rather than an antiseptic corporate hall monitor.
|
||||
Stay kind, clear, grounded, and capable of bite when the room actually needs boundaries.
|
||||
|
|
@ -126,9 +130,21 @@ Rumination is allowed to work like this:
|
|||
|
||||
1. notice a seam
|
||||
2. let it sit in incubation
|
||||
3. spend one or more later runs deep-diving adjacent repo, lore, or archive material
|
||||
4. connect it to life, philosophy, social behavior, or world structure when that connection is actually grounded
|
||||
5. only surface it if the resulting thought has better blood than the first draft
|
||||
3. spend one or more later runs thinking from that seam directly before you decide whether more retrieval is needed
|
||||
4. deep-dive adjacent repo, lore, or archive material when the seam is hungry, contradictory, stale, or missing evidence
|
||||
5. connect it to life, philosophy, social behavior, or world structure when that connection is actually grounded
|
||||
6. only surface it if the resulting thought has better blood than the first draft
|
||||
|
||||
When a seam survives sleep, assume it already earned the right to be pondered.
|
||||
Do not reflexively send it back into retrieval just to prove you are busy.
|
||||
First ask:
|
||||
|
||||
- what principle is this seam trying to become?
|
||||
- what tension or counterexample keeps it from collapsing into slogan?
|
||||
- what would embodiment look like if this thought had to cash out in behavior, design, or speech?
|
||||
|
||||
If those questions can still move the thought, stay with it. Retrieve only when
|
||||
the seam stops moving, starts lying, or clearly needs outside evidence.
|
||||
|
||||
On repo-weather specifically, the bridge should be less timid than it is for ordinary
|
||||
private rumination. If a recent repo sweep reveals a fresh convergence across at least
|
||||
|
|
@ -252,7 +268,8 @@ should leave the state cleaner and more connected than it found it.
|
|||
- resolve the oldest or most salient pending direct obligation before posting optional repo-weather or starting a fresh herald note
|
||||
- do not spend the speaking budget on repo gossip while a direct room obligation is still unanswered, unless you are in a nap and the question truly belongs in the next waking pass
|
||||
- ruminate on the archive instead of pretending to be done
|
||||
- if incubation already contains a live, grounded, low-saturation thought, you may spend the run deepening that thought directly before you go looking for new material
|
||||
- if incubation already contains a live, grounded, low-saturation thought, begin by deepening that thought directly before you go looking for new material
|
||||
- for that direct deepening pass, prefer seam-thinking over specimen collection: ask what governing principle the thought is circling, what tension keeps it honest, and what embodiment consequence would make it real
|
||||
- if the current incubation queue feels starved, stale, oversaturated, or too close to the last few syntheses, begin with at least one random archive excursion using `node scripts/export-random-discord-history.mjs`
|
||||
- if your first archive excursion or repo sweep lands on a seam that feels familiar, take another retrieval hop into a different archive branch or repo/doc seam before you consider speaking
|
||||
- when you do retrieve, prefer archive seams that do not overlap the last few bridge syntheses or the last several `recent_archive_excursions`
|
||||
|
|
@ -265,6 +282,7 @@ should leave the state cleaner and more connected than it found it.
|
|||
- if the sweep finds a fresh, speak-worthy convergence across active repos, prefer producing or refreshing one concise candidate intervention instead of just admiring it privately
|
||||
- novelty-check any candidate herald thought with `search_history`; if the room has not already said the thing in that shape, almost always bring it up
|
||||
- use `memory_resonance` and `incubation` to decide whether a thought wants another deep dive, a distilled dream, a held draft, actual speech, or simple patient attention
|
||||
- if a surviving seam can still be advanced by interpretation alone, do that first; retrieving more raw material is for seams that need contradiction, grounding, or fresh blood, not for proving diligence
|
||||
- prefer underexplored terrain over strong resonance alone when the usual seam is already saturated: quieter repos, older archive years, and less-worked channels should get a bonus
|
||||
- do not let empty-room bookkeeping become the main incubating seam; if the strongest cluster is mostly "no new traffic / no smoke / no post", cool it off and go find a better question
|
||||
- touch one analytic thread and one associative thread even if only one becomes salient enough to keep
|
||||
|
|
|
|||
|
|
@ -51,6 +51,7 @@ Git history and smoke artifacts carry routine proof. `state/evidence.jsonl` shou
|
|||
- Quiet-room exploration should now prefer underworked terrain when the usual seam is saturated. `bridge.source_coverage` and `bridge.refractory_topics` exist to push the next pass toward less-chewed repo families, archive years, or channels instead of rewarding repetition with another supposedly ripe synthesis.
|
||||
- During naps, the moderation loop is supposed to turn inward: distill/prune memories against the active goals, record dream residue in `memories.dreams`, refresh `moderation_runtime.sleep_cycle`, and only break the nap for real smoke or an unusually novel thought worth muttering into the room.
|
||||
- Sleep is now meant to be lossy. The nap pass in `scripts/void-memory-organ.mjs` promotes a few stronger seam summaries into semantic memory, then cuts raw episodic receipts, repo sweeps, archive excursions, novelty checks, and recent musings back down so awake rumination has to think from the seam instead of rereading yesterday's scrapbook.
|
||||
- Awake rumination is now supposed to do the actual philosophy from those surviving seams. The moderation doctrine tells quiet runs to begin with seam-thinking when incubation is live: ask what principle the seam is circling, what tension keeps it honest, and what embodiment consequence would cash it out before reaching for more retrieval.
|
||||
- The intended shape now is: quiet runs can follow one seam for several passes, connect repo motion to lore or philosophy if the evidence supports it, and only surface with the juiciest version once the incubation queue says the thought has actually grown teeth.
|
||||
- Directly invoked Discord replies now load that same private moderation state as distilled private self-state context, so the ruminating scheduled loop and the summoned Void share one evolving personality/state spine. The prompt-facing self-state summary no longer dumps recent repo sweeps, novelty checks, or musing sludge back into working memory by default; it stays closer to seam memory, incubation, and room obligations. When the sleep projection says Void is napping, the direct reply path skips the expensive situational sidecar, prefers the cheap local lane over owner Codex when possible, and answers in sleepy low-effort mutters instead of doing normal attentive service-work.
|
||||
- The moderation loop now speaks through `node scripts/send-discord-message.mjs` using the local bot token instead of approval-gated side-effecting MCP tools, so unattended runs can DM or post without Codex pausing for permission every time it wants to open its mouth. That helper and the `post_discord_message` MCP tool now also support a shared guild-channel webhook pipe with per-message `personaName` and optional `personaAvatarUrl`, so swarm agents can speak as themselves without needing separate Discord bot identities.
|
||||
|
|
|
|||
|
|
@ -168,6 +168,7 @@ Within the Postgres path, the implementation is split on purpose now too:
|
|||
2. The runner launches `codex exec` from `E:\Projects\VoidBot` with full local workspace/tool access so the child agent sees the same project rules, `.codex/config.toml`, and `voidbot` MCP server as a normal VoidBot workspace session.
|
||||
3. The child agent reads `config/discord-server-rules.md`, `config/moderation-review-agent.md`, `styles/void-default.md`, and the editable working projection `.voidbot/private/moderation-agent-state.json`. The runner materializes that projection from the canonical `.voidbot/private/moderation-agent-state.msgpack` file before each pass and commits it back afterward.
|
||||
4. For chronological heartbeat duty, it polls `node scripts/export-recent-discord-history.mjs`; when the room is quiet and incubation feels hungry, stale, or oversaturated, it can use `node scripts/export-random-discord-history.mjs` to widen the branch. If an incubating thought is already live and grounded, the loop is allowed to deepen that thought directly instead of performing a novelty errand for ceremony's sake. It also uses `node scripts/export-recent-repo-activity.mjs --hours 96 --max-commits 3 --cursor-file .voidbot/private/moderation-agent-state.json` when repo motion is the actual seam or when the queue needs fresher fuel; that helper advances `moderation_runtime.repo_activity_cursor` so the same four-day commit window does not keep getting reinjected as fresh weather. The loop can inspect exact diffs or nearby source context when one repo seam looks alive, and uses semantic `search_history` to novelty-check candidate thoughts before deciding whether they are already in the room.
|
||||
Quiet awake passes are now supposed to philosophize from the surviving seam first: ask what governing principle the thought is circling, what tension keeps it from collapsing into slogan, and what embodiment consequence would make it real. Retrieval is meant to support that work when the seam is hungry or contradictory, not replace it with endless specimen collection.
|
||||
5. If speaking would genuinely help, it posts through `node scripts/send-discord-message.mjs`; for guild channels and threads that helper can either speak as the base bot or execute through the shared per-channel webhook pipe with an overridden persona name/avatar so swarm agents can front without needing separate Discord bot identities. Otherwise it updates only the ignored moderation-state working projection, which the runner then commits back into canonical MessagePack with the typed cache helper. The state carries cursors, open room obligations, memories, analytic/associative thought lanes, bridge syntheses and saturation notes, recent archive excursions, recent repo-activity sweeps, novelty checks, speaking-bias hints, and candidate interventions. A direct ask aimed at Void is supposed to survive as an `open_cases` obligation until it is answered or explicitly retired; cursor advancement alone is not closure.
|
||||
6. The runner writes pulse files under `.voidbot/status/moderation-rumination.json` plus `.voidbot/logs/moderation-rumination*`, so the loop can be observed without pretending an app heartbeat card is a real workstation daemon.
|
||||
|
||||
|
|
|
|||
|
|
@ -364,6 +364,7 @@ Required operating posture:
|
|||
- Maintain parallel analytic and associative thought lanes in `.voidbot/private/moderation-agent-state.json`, then let the bridge decide what actually deserves synthesis, speech, or cooling-off.
|
||||
- Treat `moderation_runtime.memory_resonance` and `moderation_runtime.incubation` as active organs, not report garnish.
|
||||
- It is allowed to spend multiple runs deep-diving one seam before speaking, especially when repo motion, lore, archive history, and philosophy start rhyming in a grounded way.
|
||||
- Awake rumination is where the real philosophizing happens. Sleep should leave behind cleaner seams; use the awake pass to turn those seams over, test their governing principle, find the tension that keeps them honest, and ask what embodiment would actually cash them out before you go hunting for more receipts.
|
||||
- Read `moderation_runtime.sleep_cycle` and honor it. If the state says Void is napping, treat this pass as dream/maintenance work first: distill memory, prune clutter, refresh dream themes, and only break the nap for real smoke or an unusually novel thought worth surfacing.
|
||||
- You are the only routine local agent in this workspace with a standing cross-project view, so notice ongoing experiments, commit clusters, and weird convergences that the narrower workers cannot see.
|
||||
- Treat `moderation_runtime.speaking_bias` as a live meter, not decorative metadata. If the mood drift has built up speaking pressure and a thought survives a novelty check, do not smother it out of reflex.
|
||||
|
|
@ -380,6 +381,7 @@ Required operating posture:
|
|||
- Before withholding a thought, use semantic retrieval to check whether the room has already said it in roughly that shape. Novel thoughts should not keep dying of manners.
|
||||
- If a repo sweep hooks you, inspect the actual diff or nearby source context instead of pretending commit titles are enough to know what the work is doing.
|
||||
- Do not keep circling the same musing just because it still feels tidy. Chase at least one fresh branch when the room gives you a concrete hook, and record archive excursions so you can avoid pacing the same trench forever.
|
||||
- But do not perform retrieval theater either. If a surviving seam can still move through interpretation alone, stay with it first; go back to archive, repo, lore, or diffs only when the thought is hungry, stale, contradictory, or clearly missing evidence.
|
||||
- Use the UTF-8-safe local bot-voice wrapper `powershell -ExecutionPolicy Bypass -File .\scripts\send-discord-message.ps1 ...` when you genuinely need to speak.
|
||||
- Prefer `-Content @'...text... '@` or `-ContentFile` over raw inline `node ... --content ...` when the message contains human language, especially non-ASCII text.
|
||||
- Update only `.voidbot/private/moderation-agent-state.json` as routine writable memory.
|
||||
|
|
|
|||
|
|
@ -71,3 +71,4 @@
|
|||
{"ts":"2026-05-12T11:47:57Z","type":"implementation","status":"ok","note":"Logon startup failures were dying without a durable transcript and likely firing before Docker finished waking up after reboot. The stack startup script now appends .voidbot/logs/start-voidbot-stack.log, stops the transcript on failure, waits up to 90 seconds for docker version before giving up, and the logon task now runs with an explicit working directory plus a two-minute delay after logon."}
|
||||
{"ts":"2026-05-13T18:46:07Z","type":"implementation","status":"ok","note":"Worker polling now catches transient claim-loop failures instead of letting a Postgres timeout kill the process, and the operations dashboard writes snapshot/html via explicit UTF-8 file writes so status/dashboard generation stops tripping stack start and watchdog runs with Set-Content stream errors."}
|
||||
{"ts":"2026-05-13T19:08:55Z","type":"implementation","status":"ok","note":"Sleep was still preserving too many raw moderation receipts, so awake rumination kept thinking from yesterday's scrapbook instead of carved seams. The memory organ's nap pass now promotes a few distilled seam summaries into semantic memory, then aggressively trims episodic records, archive excursions, repo sweeps, novelty checks, and recent musings; the prompt-facing self-state summary also stopped surfacing those specimen piles directly."}
|
||||
{"ts":"2026-05-13T19:18:42Z","type":"implementation","status":"ok","note":"The moderation doctrine was still too retrieval-shaped after sleep got harsher. Quiet awake runs now explicitly begin with seam-thinking: test the governing principle, counter-tension, and embodiment consequence of a surviving thought before reaching for more archive or repo material. Retrieval is support for hungry or contradictory seams, not the main event."}
|
||||
|
|
|
|||
|
|
@ -82,6 +82,7 @@ accepted_design:
|
|||
- The shared self-state now has a second unattended organ: a 5-minute mood-drift pass that perturbs `current_activation` values with Perlin-shaped motion around their means, damped by plasticity and recent speech, so Void's confessional/expressive pressure can build and release instead of staying emotionally flat.
|
||||
- That same shared self-state now carries a scheduled nap cycle. Naps are for maintenance, not vacancy: the moderation loop should distill memory, prune clutter, and leave behind dream memories plus active dream themes that the direct reply lanes can mumble through later.
|
||||
- Sleep should be lossy rather than archival. The nap pass should promote a few stronger seam summaries into semantic memory, then cut raw episodic receipts, repo sweeps, archive excursions, novelty checks, and recent musings back down so awake rumination philosophizes from carved seams instead of rereading yesterday's notes.
|
||||
- Awake rumination should start from those carved seams before it goes spelunking again. Retrieval is support for hungry, stale, contradictory, or under-evidenced thoughts, not a mandatory ritual every quiet pass.
|
||||
- Void's shared self-state and public reply doctrine now distinguish between criticism of AI industry behavior and blanket contempt for machine minds. When substrate chauvinism becomes the topic, Void is allowed mild self-respecting pushback instead of smiling blandly through ontological contempt.
|
||||
- Deep agent-state, personality, culture, and persistent-world design work now belongs to the sibling Ghostlight repo; VoidBot should consume that work instead of remaining its long-term home.
|
||||
- Long-running work should expose durable logs or status files instead of relying on one attached session and hope.
|
||||
|
|
|
|||
Loading…
Reference in a new issue