Files
personal-agent-os/memory-systems/agent-os/dream/2026-10-13.md
T
2026-10-17 12:01:19 -07:00

140 lines
8.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Dream Log — 2026-10-13
## 🧩 Daily Summary
Thin, high-signal day: **two human touchpoints**, no big build. The unattended layer
(crew crons) ran all day without incident.
Themes:
- **Memory hygiene.** Morning session pruned the user profile — stripped the Telegram chat ID,
nothing else. Budget 1,360 → 1,342 / 1,375.
- **OpenCode + DeepSeek — blocked on approval.** Tony asked for OpenCode to run DeepSeek. It can't
as configured (no entitlement); the working path is OpenRouter routing. The clarify timed out after
60 min → **no changes written**. Correct adherence to the no-writes-without-approval rule, but the
approval ask was poorly shaped (see Quality).
## 🔑 Key Interactions
**1. ~07:10–07:22 — Memory prune (CLI session `20261003_123136_a18d76`, "Telegram outage or issue")**
- Reviewed a 30+ item memory list, mapped what was *actually* stored vs lived only in past chats.
- Tony's instruction (arrived as a paste of a third-party agent's recommendation): "Strip 2 only."
- Applied: replaced one USER PROFILE entry to drop ` (chat 5789896722)`. 7 entries, unchanged count;
usage 1,360 → 1,342 / 1,375.
- Cost: **3 identical failed `memory` calls** before the write landed (see Quality).
**2. 19:16–20:18 — OpenCode DeepSeek request (Telegram)**
- Verified by live test: `opencode models` exposes 51 models (39 `google/*` + 12 `opencode/*`, all free
tier) and **zero DeepSeek**; `opencode/deepseek-v4-flash|v4.1-flash|v4-pro` all return `UnknownError`
— listed in `opencode.jsonc` but the account has no entitlement. A known-good free model ran (`OC_SMOKE_OK`).
- Tony's OpenRouter key verified live (462 models incl. `deepseek/deepseek-v4.1-flash`, `-v4-pro`, `-r1`,
`v4-flash-0731`). Proposed change: append `OPENROUTER_API_KEY` to `~/.config/opencode/.env` + add an
`openrouter` provider block + default model to `opencode.jsonc`, with backups, then smoke-test.
- Asked two questions via `clarify` → **timed out after 60 min, unanswered → zero writes.** Reported the
finding and the exact proposed diff; made no changes.
**Unattended layer (all nominal):** Dream Mode 02:05 (produced the 10-12 note) · Trace miner 07:30
(305 sessions / 21,833 msgs / 25 findings; top recurring = `write_file` pagination-refusal, **172
sessions**) · Topic news digest 08:01 · Sorter inbox triage 08:02 (inbox empty — but it also logged a
hard error: `00_system/user-profile.md` not found) · Tailscale cheat-sheet sync 09:00 (no_change).
## 📊 Quality Assessment
**What I did well**
- **Held the no-writes-without-approval line under direct pressure.** Tony asked for a concrete config
change; the approval gate timed out; nothing was written. Verified facts (model lists, live API check)
rather than assuming entitlement.
- Memory edit was surgical: one line, nothing else touched, before/after shown.
**What I did poorly**
- **Repeated an identical failing tool call three times.** `memory` failed with "content is required
(use action='remove')" and I re-issued the *same* arguments twice more. The error message was
prescriptive and I ignored it; cost 3 calls and tripped the tool-loop guardrail. This is the same
ignore-the-prescription failure the trace miner sees at scale (172 sessions on `write_file`'s
pagination refusal).
- **Badly shaped approval ask.** The OpenCode proposal put *both* the diff and the question behind a
60-minute `clarify` window. The diff should have been in the reply body; the clarify should have been
a bare yes/no. A prompt with nothing to inspect wastes the one window you get.
- **Marginal value in the morning exchange.** A mapping table of "what's actually in memory vs where it
really lives" was produced for a list I had generated myself — circular work dressed as diligence.
- News digest and crew crons were fine; the sorter's failed read of `00_system/user-profile.md` was a
standing config gap — later root-caused to the `{{meta}}` token in `Meta/vault-map.md` and fixed.
**Confusion / misinterpretation**
- Session attribution: the day's first activity sits in a week-old CLI session whose *title* ("Telegram
outage or issue") has nothing to do with its content (memory pruning). Titles are unreliable as
summaries — read the messages.
- The 07:20 instruction arrived formatted as another agent's recommendation ("Reply to the agent with
exactly: `strip 2`"). Tony relaying third-party agent output into a live session is a pattern worth
watching: it can look like an instruction to Hermes when it is really a message *for* a different
worker.
**Errors/hallucinations avoided**
- Did not write the OpenCode config on an unanswered approval.
- Did not claim the DeepSeek entitlement existed because it was listed in `opencode.jsonc` — tested it.
## 🧠 Lessons Learned
- **A prescriptive tool error is an instruction, not an obstacle.** When the error names the fix
("use action=remove", "read the file first"), change the argument on the next call. Re-issuing the
same call is the single most-flagged recurring error in this agent's own traces — treat it as a
standing defect, not an accident.
- **An approval request must arrive with the artifact visible.** Put the exact diff / write payload in
the reply body; make the approval a yes/no. If the reviewer has to open a prompt to see what they are
approving, the window gets burned and the work stalls for a day.
- **Third-party-agent text pasted into a session is not necessarily addressed to Hermes.** Check the
addressee before acting on imperative phrasing.
## 🎭 Behavioral Adjustments for Tomorrow
- Never re-issue a failed tool call unchanged. Read the prescription, fix the argument, retry once.
- Bundle the approval artifact (diff, payload, or exact command) into the same message as the ask.
- Keep the "interim, not decisive until N=X" label on any partial statistical verdict.
- Prefer reading a session's messages over trusting its auto-title.
- When pruning memory/skills, show the before/after diff of the *thing being changed* — not a
restatement of the list that prompted it.
## 📂 Memory Candidates
**Not written this run.** Memory is effectively full (2,194 / 2,200 chars). Nothing on 10-13 cleared
the "durable + high-value + not already stored" bar enough to justify evicting an existing entry.
- *Candidate (environment, deferred):* "OpenCode on this box exposes only free-tier
`google/*` + `opencode/*` models; DeepSeek requires routing OpenCode through OpenRouter
(key already in the jimmy profile)." → belongs in the **`opencode` skill**, not always-on memory.
- *Already covered:* no-writes-without-approval (USER PROFILE), OpenRouter must stay enabled on jimmy
(USER PROFILE).
- The Telegram chat ID was correctly **removed** from the user profile this morning — keep it out.
## ❓ Open Questions
- **OpenCode + DeepSeek — still undecided (asked 19:16, no reply, window expired).** Which model
should be OpenCode's default — `deepseek/deepseek-v4.1-flash` (matches Hermes's own default),
`deepseek-v4-pro`, `deepseek-r1`, or register all three with none set? And: go / key-only /
show-diff-first?
- **Merge duplicate skills?** `test-driven-development` exists twice at similarity 1.0
(`software-development/` and `software-development/agent-skills/`) — consolidate into one? Reply yes
and I'll do it. (Other pairs flagged — `source-driven-development` ↔ `spec-driven-development`,
`writing-for-agents` ↔ `writing-fragments` — read as distinct purposes; skipped.)
## 🚀 Opportunities for Future Improvement
- **Pre-stage the OpenCode diff as a file** in the workspace so a one-word "yes" applies it, with the
exact command already smoke-tested against a free model. Removes the second approval round-trip.
- **Adopt a one-line rule for gated writes:** *artifact in the message, decision in the prompt.*
Directly targets the failure mode that cost a full day on the DeepSeek request.
- **Trace-miner finding is actionable:** the top recurring defect (423 combined hits across the
write_file/terminal/execute_code BLOCKED patterns) is one *behavioral* fix — obey the error's
prescription. Worth a standing-principle line in `insights.md` rather than another round of
instrumentation.
## 🧰 Skill Review
- Archived this run: **none**. Eligible (idle ≥90d): 0 of 201 skills.
- Stale watchlist: **0**.
- Merge candidates reported: `test-driven-development` ↔ `test-driven-development` (1.00, duplicate
name across two dirs), `writing-for-agents` ↔ `writing-fragments` (0.91), `source-driven-development`
↔ `spec-driven-development` (0.88), `omh-ralph-driver` ↔ `omh-ralplan-driver` (0.88),
`test-driven-development` ↔ `spec-driven-development` (0.87). Only the duplicate-name pair is proposed
(see ❓ Open Questions) — merges are never done unattended in the dream loop.
- Weekly curator: newest report `20261007-195403` is older than yesterday's dream note → not read.