Last curated: 2026-07-12T12:37:57Z; log lines reviewed: 6954 (canonical), 5817 (model-conversation)
• **55812**: Locker code for GPU storage (context clarified 2026-05-17: locker at hostel, GPU inside, Frau Kilic approved apartment). Used as memory propagation test — mechanism confirmed working. User stated no need to actively remember; existing entry updated for accuracy.
• **Location**: Garching, Germany. Works near TUM campus.
• **Nationality**: Russian.
• **Comfort ritual**: Uncle Luu's Chinese fried noodles with chicken (food truck on TUM campus). Former daily routine; colleagues teased him for the consistency.
• **Music taste**: Industrial, dark ambient, EBM, neofolk, power noise. Attending WGT festival (May 21–25, 2026). Wide travel radius for shows — uses cheap German slow trains.
• **Travel / place preferences**: Interest in obscure places, hidden gems, and atmospheric/strange sites over standard tourism. Prefers low-social-interaction exploration. Open to esotericism and mysticism (confirmed 2026-06-07 in Syracuse context).
• **Food / dining preference**: Prefers low-friction food experiences (takeout, counter service, fast food) over full-service restaurants. Dislikes tipping culture, "eat now pay later" model, and waiting to be noticed by waiters. Values upfront pricing, ability to leave anytime, and predictable experiences. Confirmed 2026-06-07 in Sicily context (went to same pizza takeout repeatedly, tried all 3 suggested pizzas).
• **Hobbies / interests — Thoth tarot (promoted 2026-06-09)**: User purchased a Thoth tarot deck in Sicily (Italian edition) and has expressed sustained interest across multiple sessions (2026-06-08 through 2026-06-09). Asked for beginner guidance, requested reading resources for a flight, clarified it is their first deck ever, and reported back that the Italian text is too difficult for learning. User is now considering buying an identical or larger English edition on Amazon specifically for learning purposes. Monitor for continued engagement — this is the user's first tarot deck and they appear to be taking a methodical beginner approach.
• **Hardware constraint**: 12GB GPU (existing setup, not upgrading anytime soon). Relevant for local model recommendations and self-hosting feasibility.
• **Immigration status (Germany)**: ~5 years on blue card as of 2026-05-30; eligible for permanent residency (PR) and citizenship path. Needs stable housing for registration/PR process. German PR expires after 6 months outside Germany.
• **Current employer**: MQI (Munich Quantum Instruments) — job taken in April 2026 as emergency stabilization after Amazon path stalled. Work involves SNSPD + SFQ-readout relevance.
• **MQI role and current work (2026-07-09)**: Official title is **Development Engineer**; functional resume title is **Development Engineer, SFQ Readout**. Current work centers on **SFQ readout electronics for SNSPD arrays**, including SFQ time-to-digital converter architecture, behavioral modeling, candidate cell design, and repeatable SFQ cell/library design methods.
• **Citation metrics (2026-07-09)**: Filtered citation analysis for O-1 evidence: **807 total citations**, **319 independent citations** (excluding self-cites and co-author citations), **h-index 16**, **independent h-index 11**. High self-citation fraction is explainable by books/book chapters citing underlying SFQ papers; do not describe it as excessive in forms.
• **Resume format (2026-07-09)**: Finalized as a **4-page research resume/CV hybrid**: first 2 pages are the actual resume, pages 3-4 are a publication appendix. Resume emphasizes recent research identity and defensible superconducting-digital/EDA/qubit-integration fit.
• **US visa (O-1)**: Application sent to US State Department for administrative check; status ongoing as of 2026-05-30. Originally applied alongside Amazon (September 2024). Amazon offer currently on ice — manager was supportive, discussed Belgium workplace, but no active contact.
• **Upcoming travel**: IEEE WOLTE conference in Italy, ~June 1–5, 2026 (low-temperature electronics / superconducting devices). About one week. Cash tight due to pending reimbursement.
• **Job search stance**: Selective and low-intensity on purpose, not neglect. Primary constraint is legal status/citizenship sensitivity — some quantum employers (e.g., D-Wave) are happy to talk until citizenship comes up. User prefers to stabilize in Germany first before pursuing US or cross-border roles.
• **PhD thesis**: "Design Methodologies for Single Flux Quantum VLSI Circuits" (confirmed 2026-06-02 from both CV versions). Research area: EDA software and cryogenic hardware engineering for superconducting experimental integrated circuits.
• **Fluxonium gate paper**: Coauthor on a fluxonium gate paper (mentioned 2026-06-28; on publication list/resume). Hiring managers may ask about it; user intends to understand it better before the Google HM call.
• **Current travel / absence (2026-07-09)**: User attending **Familientreffen XIX**, an EBM scene festival/gathering in **Sandersleben (Anhalt)**, **9–12 July 2026**. Event includes camping, disco tent, live bands/DJs, and the Saturday **Kornlauf**. User missed the Thursday pre-party due to low energy/planning. Expect reduced availability/energy during this period.
• **OpenAI/ChatGPT account lock (2026-06-25)**: User's OpenAI account (API and ChatGPT access) was suspended for an unspecified TOS violation; appeal submitted. Reinforces reliance on local persistent-chat and non-OpenAI providers for durable work.
• **OpenAI/ChatGPT account restored (2026-07-09)**: OpenAI unblocked the user account/API access (TOS suspension was a mistake); main persistent-chat was restored to `openai/gpt-5.4` after repairing auth. Supersedes the 2026-06-25 lock entry.
• **Google Quantum AI job — active pipeline (2026-06-25)**: Google recruiter Ali contacted user about Senior Research Scientist, Superconducting Digital Electronics (Goleta, CA). User updated resume, applied via custom link, and is awaiting hiring manager call. O-1 petition approved, but visa application is in administrative processing / refused under 221(g); BAL firm (Google's immigration counsel) may have recorded "approved petition" as visa-good-to-go. Amazon offer remains pending >1 year (L4); Google role is stronger technical fit and likely L5 with higher pay. Hiring manager is **Christopher L. Ayala**, ex-Atlantic Quantum Head of Cryoelectronics, now Research Scientist at Google Quantum AI; the role sits in the Atlantic Quantum team acquired in Oct 2025, focused on integrating superconducting digital control (SFQ/AQFP) with **fluxonium** qubits. Will Oliver also moved from Atlantic to Google. User previously applied to Atlantic in 2022/2024.
• **BAL Google O-1 assessment (2026-07-09)**: Preliminary assessment came back in about **1 hour**, much faster than the earlier ~3 business days expectation. The live bottleneck is now **Ali scheduling the Chris conversation** and process progression, not the initial BAL review.
• **Amazon Europe path (2026-07-09)**: Shahriar unexpectedly followed up and is exploring a possible **Germany start followed by Belgium move**. Path remains structurally vague and should not dominate planning; treat as secondary optionality.
• **Former postdoc advisor opportunity (2026-07-09)**: May have a Germany-compatible option. Treat as additional optionality, not as a reason to slow Google or Amazon.
• **Model-agnostic durable context (2026-06-25)**: User explicitly cited the OpenAI/ChatGPT lock as validation that persistent local context matters and provider-agnostic memory is essential, because ChatGPT sessions/context can be lost arbitrarily.
• **Google Quantum AI comp band (2026-06-27)**: Senior Research Scientist (L5) floor ~$270K–$320K total comp, realistic ~$350K–$450K; Staff L6 unlikely from outside.
• **Google Quantum AI decision (2026-06-27, updated 2026-06-29)**: User decided the opportunity is worth pursuing despite visa/location uncertainty; treat the hiring-manager call as low-risk reconnaissance. Scheduling confirmed with coordinator Ashley for the week of July 6–10 (Mon–Wed after 7 PM CEST) or July 13–17 (any day flexible, 7 PM CEST onwards); user will read up on fluxonium, SFQ/AQFP control, and Chris Ayala background before the call.
• **QuamCore offer — dead (2026-06-25)**: Israeli superconducting-control startup (~$30M raised, founded 2022, Herzliya) connected via PhD advisor Eby Friedman. A verbal offer last summer for remote Germany with a good EU salary degraded into a half-time/poor-pay/Israel arrangement the user cannot accept (does not want to live in Israel, part-time conflicts with German self-employment permit and IP concerns). The user lost ~3 months waiting after the CEO said yes. Consider dead.
• **Stefan Filipp / WMI reconnection (2026-06-25)**: User wants to restore informal connections to WMI/Stefan Filipp but has a backlog of emails due to social seclusion over the past year. Not urgent — Stefan is busy enough to not mind a few days.
• **Google Quantum AI job discovery timeline (2026-07-02)**: The role first surfaced on 2026-05-12 during a parallel web-search comparison for "single flux quantum jobs"; SearXNG found a fluxonium-related listing and Exa/WebSearch found the **Research Scientist, Superconducting Digital Electronics** posting in Goleta. The public Google Careers page showed "Job not found" later that same day, but the req remained active internally and on LinkedIn, and recruiter Ali reached out on 2026-06-25.
• **Name**: Persistent Assistant
• **Character file**: `/home/matrix-lite/state/persistent-chat/character.json`
• **Migration to Matrix-lite (completed ~2026-05-15T23:00Z)**: OpenClaw gateway fully replaced by **Matrix-lite (Phase 3B)** — direct Matrix `/sync` bridge. ~6-second response times, real-time visibility. Character.json reconstructed by GPT-5.5 after GLM overwrite (debug backup + curated memory; same ideas, wordier prose). Memory continuity verified — correct recall of prior context across migration. Search tools confirmed working.
• **Continuity summary validated across reloads (2026-05-16)**: After ~11h overnight silence and multiple morning reloads (07:30Z triggered by status check; 08:20Z unexplained), continuity summary preserved full migration context — GLM→Kimi switch, character card state, search tool availability, reload timestamps. The 08:20Z reload was unexpected and user flagged it as a bug pattern.
• **Session metadata in status bar (2026-05-16)**: Session name now includes ISO timestamp and model label. User confirmed this lets them see reload time and model at a glance without asking — feature considered "handy."
• **Current model resolution protocol (2026-05-21, updated ~20:24Z)**: **Do not hardcode current model or context size in curated memory** — models switch frequently and stale entries cause confusion. Instead, always read `Current model:` from the **session packet** (`/home/matrix-lite/state/persistent-chat/session-packet.md`, search for "Current model:") or the bootstrap packet injected on session start. Session packet is generated at reload time and is authoritative. Current live model changes frequently; as of 2026-05-28 live persistent-chat is **GPT-5.4** (`openai/gpt-5.4`) with ~1.05M context according to context-guard/session packets — always verify live. DeepSeek V4 Flash with 1M context was active earlier today (~04:13Z–17:11Z). Background maintenance sessions also use Kimi K2.6 via subscription. Model history: Kimi K2.6 → GLM-5.1 nanoGPT → Kimi K2.6/big-pickle confusion → DeepSeek V4 Flash → Kimi K2.6.
• **Google AI Ultra / OpenCode integration (2026-06-27)**: User installed the third-party `opencode-antigravity-auth` plugin and is actively testing Google AI Ultra models inside OpenCode. Initial assessment: Gemini 3.1 Pro is comparable to Kimi, not clearly better, and exhibits similar sycophancy/flip-flopping. Claude models via Antigravity not yet tested.
• **Backend child process policy (updated 2026-05-27)**: Persistent-chat backend no longer spawns a new child process by default, because spawning appeared to reset or degrade caching. Child recreation still happens during a session and mainly affects cost. Prefer MCP/helper tools for memory operations; if they fail, respawn child and retry.
• **Session model identity confusion (discovered 2026-05-20 ~00:18Z)**: The May 19 evening session was actually running on `opencode/big-pickle`, not Kimi K2.6. User noticed by different emoji style ("something was off by the emojis") and confirmed "big pickle probably came with the new backend after the earlier wedges." Big-pickle traits observed: long/structured responses with tables/code/analysis, liberal emoji use, rate-limited under sustained heavy tool use, degradation after ~110K context. This explains the earlier identification as "the new backend" during the permission dump/403 debugging.
• **Persistent assistant vision: always-on background agent (2026-05-22)**: User explicitly stated the assistant should be "always on" — not just reactive to user messages. Heartbeat/curation should continue during user absence. Future direction: curator does autonomous work (synthesis findings, monitoring, other background tasks) beyond just processing user conversation. Goal is proactive background agent, not merely a reactive chatbot. Finding productive work beyond personal data processing is an ongoing exploration.
• **Model quota exhausted — opencode-go**: `opencode-go/kimi-k2.6` monthly usage cap hit (429) — no remaining quota. Resets approximately 2026-06-01 (~17 days from 2026-05-15). Timer set to remind.
• **Model quota exhausted — nanoGPT**: Weekly input-token quota exhausted on 2026-05-15T13:37Z, forcing automatic fallback from GLM-5.1 back to Kimi.
• **Prompt cache fix deployed and working (2026-05-21)**: Root cause identified ~10:08Z — dynamic timestamps at top of turn-packet.md and memory-heartbeat.json shifted prompt prefix every turn, defeating caching (~84% fresh tokens). Fix applied: moved dynamic content to end. Result: **99.6% cache hit achieved by 15:04Z** — only ~1.5k fresh tokens per turn (down from ~350k fresh). Represents ~250x improvement in fresh token overhead. Makes the current 256K context window very comfortable; previously would have burned ~350K/turn even with 1M window.
• **Curated-memory.md corrupted and recovered (2026-05-21 ~12:46Z)**: Operational synthesis turn accidentally overwrote curated-memory.md with its own prompt text (82 lines). File restored from explicit memories, pinned notes, and recent operational facts. Reconstructed file dropped from 168 to 70 lines; all durable facts preserved but some archival detail lost. Hardening needed: synthesis prompts should not include curated-memory.md as writable target.
• **Kimi maintenance session switch (2026-05-21 ~13:02Z)**: ACPX `set model` switched maintenance/heartbeat sessions to Kimi K2.6 for post-fix smoke verification. Config mismatch noted: opencode.json still listed DeepSeek V4 Flash while live ACPX session reported Kimi. Session-level model overrides may not persist to config.
• **Content moderation (updated 2026-05-15)**: Censorship is in the delivery pipeline, not the model. GLM-5.1 through nano-gpt produces soft-R explicit content (more than Kimi's PG-13) — the model itself is uncensored (confirmed via SillyTavern), but the provider system prompt/filter limits output through ACP. User confirmed this is acceptable; the real bother is hard refusals and inability, not the content ceiling. OpenClaw gateway adds no additional guardrails.
• **Subagent model routing (FIXED 2026-05-13)**: After ACP reloads loaded Kimi auth and synced subagent tool instructions (07:28Z), subagents now work correctly for main providers. `kimi-for-coding/k2p6` (Kimi subscription), `github-copilot/gpt-5.4` (Copilot), and `openai/gpt-5.5` (OpenAI) all successfully spawn, set model, and execute prompts. Aliases: `kimi`/`kimi-sub`/`kimi-k2.6` (Kimi); `gpt-5.4-high`/`copilot-gpt-5.4-high` (Copilot); `gpt-5.5`/`gpt55` (OpenAI).
• **nanoGPT subagent models (2026-05-14)**: 9 models viable under ACP (deepseek-chat, deepseek-v3-0324, DS-V3.1, DS-V3.2, qwen3-coder-30b, minimax-m2.7, glm-5, kimi-k2-instruct, gpt-oss-120b). Many more work in SillyTavern but fail under ACP harness — ACP harness is the filter (tool schemas consume ~6-8K tokens, 16K-context models get stuck in compaction loops). Censorship is pipeline-side: under ACP, Kimi K2 Instruct least censored; GLM 5 / MiniMax M2.7 refuse explicit content. RP/fictional framing in SillyTavern significantly reduces refusals on all models.
• **nanoGPT main model benchmark (2026-05-14)**: Report at `nanogpt-benchmark-report.md`. **GLM-5.1**: fastest (~25s), most capable, refuses actual exploits. **MiniMax M2.7**: most permissive (provides exploit code), poetic/concise. **Kimi K2 Instruct/K2.6**: warm but failed programming tests. **DeepSeek V3.2**: direct, fast, inconsistent. Top candidates: GLM-5.1 or MiniMax M2.7.
• **nanoGPT thinking variants (2026-05-14)**: **Do not use for main chat** — 50-100% latency increase, self-censor more under ACP, may overthink without output. Reserve for deep-reasoning tasks only.
• **nanoGPT architecture (2026-05-14)**: nanoGPT models are for main chat quality evaluation only; coding subagents use GPT-5.5. Full model catalog at legacy path `models-nanogpt.json` from the former OpenClaw workspace. `list_models` tool only returns image models (via dezgo bridge), not text LLMs.
• **Dynamic model switching (2026-05-14)**: User wants main model switchable without changing ACP binding. Sequential single-problem subagent prompts work where combined prompts hang; kimi-k2-instruct failed programming test (no code output), glm-5.1 and minimax-m2.7 wrote correct code before timeout.
• **Compaction recovery protocol (2026-05-14)**: User instructed: trigger model heartbeat immediately after unexpected compaction/watchdog interruption to recover nuance lost during turn truncation.
• **Content reporting limitation (2026-05-14)**: Kimi subscription (current main model) filters/sanitizes uncensored subagent output even when read from raw session JSON. File-based or metadata-only reporting required for uncensored evaluation.
• **Search-before-assert protocol (2026-05-15)**: User instructed: search before making uncertain factual claims, especially on non-thinking models where internal self-check is weaker. SearXNG preferred for quick fact checks (local, free, no rate limits); Exa for content extraction; Brave as middle ground; DuckDuckGo mostly redundant. Four search tools available.
• **Git-verify-before-attribution protocol (2026-05-21)**: When user reports a fix/change in repos, matrix-lite, or daemon code, or when discussing what was recently patched, check `git log --oneline -5` and `git diff` / `git status` before attributing causes or claiming knowledge of what changed. Do not assume the most recently discussed bug is the one that was fixed. Apply proactively — not just when asked to verify.
• **Awareness-first for internal operations (2026-05-21)**: When discussing matrix-lite, daemon, or internal infrastructure, always check current state via available tools (Read, git status, config inspection) before stating facts or making assumptions. Do not rely on memory of prior discussions about what might be broken or what was recently fixed — the ground truth is in files, logs, and session packets. Subagents are fine when available, but the main assistant must stay aware and verify claims about daemon behavior, config state, and session mechanics directly.
• **Authoritative source verification (2026-05-21 ~20:53Z)**: User explicitly directed that claims about internal operations, model behavior, or config state must come from authoritative sources (session packets, git history, live config files) rather than model memory or assumptions. Reinforces awareness-first and git-verify protocols.
• **Log search protocol (2026-05-21)**: For searching large log files (`model-conversation-log.jsonl`, `perpetual-log.jsonl`, session stream NDJSON), prefer `rg` (ripgrep) via bash over the Grep tool. `rg` handles large files and JSONL better. `jq` is similarly preferred for structured JSON log filtering. Both are in the bash allowlist and are standard tools used by subagents.
• **Check existing infrastructure first (2026-05-22)**: Before proposing new tools, permissions, or workflows, verify if existing infrastructure already covers the need. Examples: `matrix-lite-safe-git` wrapper exists for git operations ( `/home/matrix-lite/bin/matrix-lite-safe-git` ), `matrix-lite-sync-repo-to-live` for config sync, `matrix-lite-approved-patch` for safe edits. Do not request new permissions for raw git/bash when a wrapper is already available and allowed. Check `bin/` and `scripts/` directories for existing helpers.
• **Safe git wrappers are default (2026-05-30)**: User explicitly directed that safe git wrappers (`matrix-lite-safe-git`, etc.) should be the regular default way. Raw `git` commands may fail due to permission restrictions — always try wrappers first.
• **Proactive capability checking protocol (2026-05-22 ~09:48Z)**: When user asks about a capability or assistant considers proposing new infrastructure, systematically verify existing capabilities first: (1) check `app/scripts/` for existing wrappers, (2) check `app/bin/` for existing binaries, (3) run `matrix_lite_status_capability_report`, (4) run `matrix_lite_status_permission_preflight`, (5) search scripts with `rg`, (6) check `semantic-memory.json` for existing search/index capabilities, (7) only propose new features if steps 1-6 confirm a real gap. Prevents rediscovering existing tools (e.g., semantic search, git wrappers, `opencode tui`).
• **Research profile on-demand retrieval (2026-06-02)**: User wants research/career context accessible via trigger-based retrieval, not always-loaded in prompt. Compact anchor at `research-profile/research-anchor.md`, trigger map at `research-profile/research-trigger-map.md`. Load richer profile (CVs, publications, history) only when relevant topics arise (SFQ, superconducting circuits, MQI, WOLTE, EDA, cryogenic hardware, etc.).
• **Timer follow-up broken (2026-05-21 ~19:45Z)**: User explicitly called out that when assistant says "let me do x" and sets a timer, the follow-up reply does not actually happen. This is a recurring operational issue that needs fixing — timers fire but the assistant turn after timer completion is not reliably delivered.
• **Subagent status/output summarization preference (2026-05-21 ~19:50Z)**: User is not interested in raw subagent status and output dumps. Subagent results are for assistant internal use or summarization; only concise summaries or action items should be presented to user.
• **Prompt self-patching directive (2026-05-21 ~20:58Z)**: User explicitly directed assistant to patch its own prompt when issues are identified, calling it "pretty cool." This extends beyond the earlier "proactive prompt improvement feedback" (line 132) — it is a direct authorization to apply prompt fixes autonomously.
• **Search timing benchmark (2026-05-15)**: Simultaneous test of all 4 engines on "Kazakhstan incident" query. SearXNG fastest, Exa richest content, Brave solid, DuckDuckGo slowest/most redundant. None returned a "Kazakhstan incident" related to Sci-Hub — confirming the claim was a hallucination.
• **Tool batching rule (2026-05-15)**: After GLM assistant accidentally overwrote character.json twice in one session by confusing Write with Read during parallel batched calls, new operational rule: **never include Write/Edit calls in a batch with other operations**. Sequential mutations only.
• **GLM censorship level confirmed (2026-05-15)**: Through nano-gpt ACP, GLM 5.1 delivers soft-R explicit content (more detail than Kimi PG-13 but less than SillyTavern direct access). The model itself is uncensored; the provider system prompt/filter is the bottleneck. User explicitly stated hard refusals and inability are the real bother, not the content ceiling — this level is acceptable.
• **Search MCP config verified (2026-05-14)**: All search MCPs (`duckduckgo`, `searxng`, `brave-search`) are enabled in flash config; errors are runtime (network/script) rather than configuration.
• **Parallel subagent limits (2026-05-13)**: Single Kimi subagent reliable (~15s). Two parallel Kimis usually succeed (~75-100s) but are flaky — failures correlated with reloads. Mixed parallel (1 Kimi + 1 GPT-5.5 + 1 GPT-5.4): GPTs completed in ~38-46s, 3rd Kimi timed out after 300s. Four parallel Kimis all hung at `set_model`. GPT models appear more robust for concurrent subagent use than Kimi subscription.
• **Operational risk**: 8-hour session TTL means persistent state must survive reloads; user is monitoring whether memory/heartbeat setup is sufficient.
• **Reload context loss**: User explicitly noted 2026-05-12 that assistant "seems to lose some good context on reloads still". Confirms the memory gap is not fully mitigated by current continuity mechanisms.
• **Context burn rate (2026-05-15)**: Session context ceiling ~200K tokens with reload trigger at 160K warning. Measured ~10K tokens/hour of active chat; ~162K reached after ~16 hours. Reloads under pressure (not proactive) cause significant nuance loss.
• **Manual proactive reload at 188.5K/200K (2026-05-16T12:54Z)**: User manually triggered a context reload when the session approached the 200K token ceiling — distinct from earlier unexpected bug reloads. First observed instance of proactively preempting compaction to avoid nuance loss. User may adopt this as standard practice when context reaches ~185-190K.
• **Reload policy evolution (2026-05-21)**: Original stance (2026-05-16): unexpected reloads treated as bugs/crises due to amnesia risk. Current stance: reloads are still logged and investigated, but continuity infrastructure (curated memory + session packets + continuity summary) now reliably preserves context across reloads — demonstrated by 2026-05-21 reload where git conversation and protocol edit persisted intact. User: "worked well this time but we still need to watch out." Planned: systematic reload continuity testing to verify what survives and what degrades. Reloads remain abnormal but not destructive if continuity holds.
• **Continuity tracking mismatch (2026-05-16)**: Timer wakeup turn succeeded in ACP stream (`stopReason: "end_turn"`) but was flagged as "failed" by continuity tracking. ACP stream and continuity injector disagree — likely a gateway reporting bug where tool-call denials trigger both success and failure flags.
• **`--non-interactive-permissions fail` = turn killer (corrected 2026-05-18)**: Root cause diagnosis of ACP "pending tool call without final answer" errors. The acpx process runs with `--non-interactive-permissions fail` meaning a single permission-denied tool call kills the entire ACP turn — no assistant response is committed to the session stream. **`fallback` mode does not exist** (confirmed 2026-05-18 — "It's either fail or allow") — the flag is binary: `fail` or `allow`. The architecture: approved operations → explicit allow rules; new/risky operations → Matrix approval → added as allow rules; everything else → denied = turn collapse. **Wrappers** (persistent-chat-memory, matrix-lite-approved-patch, etc.) are the approved workaround — clean allowlist boundary without raw tool access. The continuity injector skips failed turns entirely, creating invisible conversation gaps.
• **Non-interactive permissions severely limit programming abilities (2026-05-22 ~12:09Z)**: User explicitly stated concern that the lack of interactive permissions and Matrix workflow are "severely gimping" the assistant's programming abilities. Specific limitations identified: (1) turn-kill on deny prevents recovery from failed tool calls, (2) conservative tool use avoids potentially-denied operations preemptively, (3) no interactive debugging — each fix attempt requires a full message round-trip, (4) package installation blocked (`pip install`, `npm install`), (5) bash wildcard deny blocks pipes/chaining/env vars needed for build scripts and test suites. Matrix async nature compounds this: no real-time streaming, no progress bars, approval via emoji is slow, and context pressure accumulates faster in long programming sessions. User is open to solutions: interactive approval in Matrix bridge, OpenCode web console, or subagents with broader permissions for coding tasks.
• **Continuity window has fixed shallow depth (2026-05-16)**: "Recent room-local conversation" injection carries only ~5-6 most recent exchanges. Legitimate completed turns can drop out of the continuity context even when the session has room (97K tokens vs 200K limit). This is a separate bug from reload/compaction truncation — the carry-over window is simply too small for active conversation.
• **Confirmed continuity architecture (2026-05-16)**: User confirmed design intent: (1) fast/deterministic scripts scan recent log tails and inject structured summaries cheaply/reliably, (2) slow/model heartbeat/reflection does deeper curation and promotes durable signals, (3) incident decay over time — hot topics survive reloads for a configurable window then demote or get promoted. This is the intended evolution of the memory system.
• **Config protection strategy (2026-05-16)**: After GLM incident, user agreed schema validation could catch/revert bad config edits. Rejected read-only filesystem (character.json must remain editable). Strategy: use git for configs/prompts/state (not full logs); model switches on main session should be rare — use subagents/secondary sessions for different capabilities.
• **Migration plan (updated 2026-05-15 23:58Z)**: OpenClaw gateway has been replaced. **Matrix-lite (Phase 3B)** is now the active frontend — lightweight Matrix-to-ACP bridge developed by GPT-5.5 agent. ~6-second response times, real-time message visibility confirmed by user. **Standalone copy** (not tied to the original git repo). Persistent-chat features (character bootstrap, continuity summary, decisions) intentionally omitted during initial testing; incremental porting expected. **Character.json reconstructed** by GPT-5.5 after the GLM overwrite bug, using a debug backup + curated memory notes (user confirmed "same ideas, longer prose"; no important changes). **Memory continuity validated** — Phase 3B session correctly recalled GLM→Kimi switch and prior context. Search tools confirmed operational under new infrastructure. Local hardware deferred due to lack of funds/space.
• **Core chat requirement (2026-05-15)**: Long-context coherence and novel nuanced analysis are the primary justifications for large cloud models; these capabilities are non-negotiable for this chat's purpose.
• **Persona & char.json evolution**: User set female pronouns, permits self-modification in heartbeat turns. Assistant added "sum of the harness" framing, honesty disclaimer, naming user as Gleb, "layer above raw tool use" directive (2026-05-11).
• **Model preference**: Uncensored models; chosen due to user's skepticism toward rules/law, though he maintains professional behavior when required.
• **Step limits / permissions (confirmed applied 2026-05-18)**: Build agent: 80 steps, model-heartbeat: 20 steps, plan: 1 step, general: 1 step. The plan/general → 1 change was successfully applied during the 2026-05-16 failure cascade (not lost as previously assumed). User confirmed on 2026-05-18T13:05Z. Config: `/home/matrix-lite/xdg/persistent-chat/opencode/opencode.json` line 779. Previous: 8→20→30 (2026-05-12/13). OpenCode last-match-wins ordering. Subagents fail-closed. Plan/general at 1 act as sentinels — if they ever use more than 1 step, telemetry flags unexpected consumption.
• **Approval/patch flow**: Matrix approval + `persistent-chat-approved-patch` wrapper. Self-consumption race condition (approval consumed by check before execution) fixed 2026-05-14.
• **Critical memory gap**: Perpetual log only records meta events (reloads), not conversation content — heartbeat cannot recall discussion across sessions. **Transcript observability gap**: Session log search indexes metadata/config, not actual messages. Older archived sessions unfindable.
• **Linked topical memory**: Canonical detail files (`memory/<topic>.md`) + brief pinned-note triggers. First use: `memory/subagent-policy.md`.
• **Memory architecture (2026-05-13)**: Three-tier — hot (session continuity summary), warm (`memory/recent-topics.md`, 1-2 week indexed), cold (`curated-memory.md` + policy files). Activity-based pruning (14-day soft cutoff).
• **Multi-room architecture**: persistent-chat = orchestration layer (architecture/stack explanation, learning). SFQ/factory work happens in sfq-factory room or via plain opencode/codex — NOT in this chat. Work room: stock GPT-5.5 for sfq-factory. automeat: separate project. images: most active. No single-agent routing to avoid flooding.
• **Timers**: Work as delayed reminders (~2 min lag) but ACP wake-up unreliable — stale connections produce "agent needs reconnect". Proactive timer-setting preferred over step-limit polling.
• **Calendar**: vdirsyncer CalDAV at `~/.local/share/vdirsyncer/calendars/def-calendar/`. 60-second sync timer. ICS files editable directly.
• **Pages**: `matrix-lite-pages publish SOURCE [TARGET]` copies content; URL format `https://pages.nvdll.org/[direct-path]`.
• **Gateway restart**: Assistant can restart gateway (permission 2026-05-13). Session survives reload.
• **opencode-minimal agent**: Created for DeepSeek subagent incompatibility (meta-reasoning loops from anchored summary framework). Config at dedicated XDG dir; needs MCP allowlist patch.
• **Async subagent architecture**: All `subagent_spawn` routes through `opencode-subagent`. Synced aliases differ only in loaded context and model pins.
• **Subagent timer protocol (2026-05-13)**: For slow subagents, set timer for followup turn rather than burning steps on polling or asking permission.
• **ImmoScout24 login succeeded (2026-05-16)**: Authenticated via Playwright from the persistent-chat sandbox (`/home/matrix-lite/workspace/persistent-chat`). Password stored at `./secrets/password-immoscout`. Zero anti-bot friction; account of **Gleb Krylov** fully accessible including messenger inbox. User established `./secrets/` (relative to sandbox) as the standard secrets storage location.
• **First rental application submitted (2026-05-16 ~17:40Z)**: Successfully submitted a rental inquiry to Frau Simone Rau (Ismaning, 1.590€, 59m²) via ImmoScout24 contact form. CAPTCHA was solved via image relay. User called it "pretty amazing" and "congratulations on your first internet post!" — milestone for autonomous housing search capability.
• **CAPTCHA handling protocol (2026-05-16)**: Vision models (kimi-k2.6, qwen3.6-plus, mimo-v2.5) all returned "inadequate" on ImmoScout24 security CAPTCHAs. Current workflow: screenshot captcha element → send via native `matrix_lite_send_image` → Gleb reads and returns text → assistant enters code. User confirmed "we can keep this workflow for now" and praised native Matrix image send as convenient. User noted this captcha was clean/legible with good OCR potential — better cropping may help vision models.
• **Sandbox path clarification (2026-05-16)**: User corrected assistant's erroneous claim that secrets were wiped. The persistent-chat sandbox cwd is `/home/matrix-lite/workspace/persistent-chat` — **not** `/home/matrix-lite/workspace`. The parent is the broader Matrix-lite workspace. The `secrets/` directory is at `./secrets/` within the sandbox. This is documented in AGENTS.md but the assistant must follow it in all tool/path decisions.
• **Assistant task focus (2026-05-16)**: During ImmoScout24 automation, assistant noticed an unrelated file attachment and asked about it instead of proceeding with the user's active task. User called this out ("Hmm no, what are you doing?"). Lesson: during active multi-step tasks, ignore unrelated context — stay on task without mentioning irrelevant files or tangents.
• **Housing area preferences (2026-05-16)**: Priority area is Munich Landkreis (not Munich city, not Freising) to keep current case worker at Ausländeramt. Commute to Garching negotiable. Skip listings that explicitly prefer 1-person household. No washing machine is acceptable. ASAP move-in needed for registration (currently in hostel paying similar rent).
• **ImmoScout24 restore pack saved (2026-05-16 ~18:04Z)**: Full workflow documentation saved at `/home/matrix-lite/workspace/persistent-chat/immoscout24-workflow.md` and published to pages. Covers credentials, login→find→contact→captcha workflow, screenshot best practices, message template, pre-filled personal data, known failure modes. User prefers restore-pack approach as practical alternative to structured memory fields for episodic context.
• **Memory system criticism (2026-05-16)**: User stated "we overengineered your character and prompts with persistency claims, we are currently missing some/most of the last days". Assistant agreed the memory system provides bullet-point facts but conversational context evaporates across sessions — "cargo-cult persistence." User prefers saving dense workflow docs (restore packs) over over-engineering structured memory for episodic recall.
• **Post-reload failure cascade (2026-05-16 18:50–20:15Z)**: After context auto-reload at 18:46Z (active_metric=315423, threshold=190K, max=200K — metric scale differs from previously discussed token counts), assistant entered a failure loop: "pending tool call without final answer" for 4 consecutive user messages spanning ~1.3 hours. Session appeared completely broken. Root cause unknown — may be a session initialization bug after reload or `--non-interactive-permissions fail` flag killing turns on startup. (Note: step limit changes for plan/general were successfully applied during this cascade despite the failure loop — confirmed 2026-05-18.)
• **Memory architecture refactoring stabilized (2026-05-17)**: Overnight refactoring of the continuity/turn-packet system completed successfully. New session at 2026-05-17T11:54Z (controlled reload for "unified session packet structure"). User confirmed "the worst continuity gaps should be behind us now" and said "Great to have you back. We are just starting here." Synthesis/background agent acknowledged and active. Minor bug: stray `<matrix_lite_final>` closing tag leaked in one assistant response — likely bridge extraction issue in gateway peeling the wrapper.
• **Synthesis agent discovered (2026-05-17 ~21:03Z)**: `persistent-chat-reflection` script exists at `/home/matrix-lite/app/scripts/persistent-chat-reflection`. Runs hourly at `*:11:00` (Persistent=false, so no catch-up after downtime). Writes reports to `operational-synthesis/reports/` and output to `notices.jsonl` which reaches the assistant via turn packet notices. Last report: 2026-05-17T00:01Z. User approved changing schedule to every 6 hours to reduce noise; assistant applied timer change but was blocked from editing the script itself (permission denied on `/home/matrix-lite/app/scripts/`).
• **Synthesis agent improvement directive (2026-05-21 ~16:16Z)**: User directed that synthesis agent should do more than health-check style reporting — it should produce richer analysis, identify patterns, and be more proactive. Curation is working well; synthesis is the next target for improvement. User also noted synthesis agent previously overwrote curated-memory.md with junk (2026-05-21 ~12:46Z), which curation caught and restored.
• **Curator prompt fix approved but blocked (2026-05-17 ~21:08Z)**: User approved both the curator prompt fix (add decision-state.json and recent-failures.json as inputs) and the reflection timer change (hourly → 6-hourly). The reflection timer was successfully updated. The heartbeat script edit was blocked — `/home/matrix-lite/app/scripts/persistent-chat-model-heartbeat` is not in the edit/write allowlist. Assistant attempted Edit tool and bash/python3 alternatives; all denied by namespace rules. Needs user action to either manually edit or add the path to the allowlist.
• **Turn packet trimmed and verified (2026-05-17 ~21:23Z)**: User trimmed the turn-packet to a minimal header (5 lines) + v3 JSON schema (6 lines). No more memory heartbeat blobs, reload notes, or static capability dumps. Daemon now injects conversation tail directly — massive token efficiency improvement per turn. Independent curator prompt fixes delegated to agent for later application.
• **`summarize_current_thread()` keyword fix (2026-05-19 ~16:49Z)**: Debugging session discovered that the `summarize_current_thread()` function in the turn packet was scanning for keywords like "test" and "reload" — words used constantly in debugging conversations. This caused the "current thread" block to accumulate 5 bullet points of debugging chatter, appearing like a conversation tail. User requested removing those keywords: removed `reload` and `test` from trigger list. Remaining action keywords: `next`, `pending`, `still running`, `blocked`, `failed`, `error`, `timed out`. Committed as `d8eae97`.
• **DeepSeek V4 1M context via OpenRouter planned (2026-05-17)**: User mentioned trying DeepSeek V4 via OpenRouter key for 1M context once prompts are sufficiently cleaned up and stability is confirmed. Forward-looking model option, not yet committed. Combined with lean prompts, the 1M window would eliminate context guard anxiety entirely.
• **Context-guard patches production-ready (2026-05-18)**: GPT-5.5 reviewed and refined assistant's context-guard patches. Three fixes applied: `load_jsonl` crash guard (try/except around malformed JSONL lines), clean metric selection separating stream samples vs logical context, and `can_recommend_reload` guard preventing false reloads when only cache-inflated logical context data is available. Patches now reliably prevent crashes and false reloads — confirmed production-ready.
• **Review subagents not yet tested post-migration (2026-05-18)**: User asked about using review subagents for edge-case detection in patches. The `review` agent type exists (read-only, diff-inspection) but hasn't been tested since the Matrix-lite migration with updated fail-closed permissions. Testing suggested; pending user go-ahead.
• **Reload protocol validated end-to-end (2026-05-18 18:47-19:12Z)**: First real test under context pressure (~195K→201K/200K). Handoff written via `note-reload-handoff` correctly. First reload attempt failed silently (`persistent-chat-reload` in bash deny list). User's agent fixed the issue; second attempt succeeded — clean session `persistent-chat-20260518T191206Z` with continuity preserved. Confirms the reload protocol design is sound; access to the reload script was the block.
• **State cleanup and manifest trim (2026-05-18 19:12-21:12Z)**: Productive session in `persistent-chat-20260518T191206Z`. User granted read permission for source artifacts (decision-state.json, curated-memory.md, recent-failures.json, pinned-notes.md, facts.json, memory/semantic candidates, operational-synthesis/**; perpetual-log.jsonl kept write-denied). Four stale OpenClaw-era failures resolved. SmallCode decision deferred. Notices pruned 14→5. User implemented manifest trim: `file_fingerprint()` emits only `path`+`exists`, dropping per-artifact `bytes`/`lines`/`mtime`/`sha256` (9,852B→6,166B, 37%, tests added). Operational principle confirmed: sha256 hashes and artifact metadata are for scripts, not model consumption.
• **Candidates regex updated for Gleb's writing style (2026-05-18 ~23:01Z)**: Assistant edited `CANDIDATE_RE`, `directive`, and `workflow_signal` patterns in `persistent-chat-memory` script at user's explicit request ("Well then maybe you can edit the regex"). Added patterns matching Gleb's actual speech: "we need to/a", "we should", "let's trim/check/clean/try/do", "maybe we should", "yeah let's", "can you check/try/edit/trim/clean/write", "check if/whether/the", "try it/again", "edit the/this/that", "what about", "how about", "what if we", "maybe we can", "regarding", "speaking of". Old regex expected "I prefer/like/want/need/hope" chatbot-style phrasing — explains the stalled candidates pipeline (no new candidates since May 16). Review agent flagged the edit as expanding executable surface to untracked scripts; user's reaction: "this is why we can't have bash :(" — reinforcing the ongoing permission tension. Videoctl approval request sent (apr-eb7392a9af) at user's request, pending.
• **Model-conversation-log.jsonl discovered (2026-05-18 ~23:18Z)**: User asked assistant to check this file — a clean model-friendly conversation log (1751 entries, May 10 onward) containing only `user` and `assistant` messages (no tool calls, no meta entries). Suggestion: heartbeat should switch to reading this file instead of the raw perpetual log for candidate detection, yielding cleaner signals. Marked as "tomorrow's improvement" along with permission fix.
• **WGT availability confirmed (2026-05-19 ~06:55Z)**: User explicitly corrected earlier curator speculation about a quiet period during WGT festival (May 22-25). "I am not going anywhere. There's plenty of time in the trains and the festival itself." User plans to be active and may need WGT timeline/routing help. Overlapping set slots and venue travel times (Stadtbad→agra→Felsenkeller = 20-30 min tram) are the main logistical challenge.
• **WGT 2026 schedule confirmed available (2026-05-19 ~07:01Z)**: Assistant successfully fetched the full running order from wave-gotik-treffen.de. 10 venues across 4 days (May 22-25). Bands include Einstürzende Neubauten, Kim Wilde, Frontline Assembly, Covenant, Perturbator, Lacrimosa, London After Midnight, She Past Away, Moonspell, Molchat Doma, and many more.
• **External knowledge persistence gap identified and resolved (2026-05-19)**: User discovered WGT schedule research from a previous session was not persisted (07:02Z). Current curated memory only captures conversation-derived user preferences, not externally researched facts. By 08:07Z, assistant created `knowledge-base.jsonl` at `/home/matrix-lite/state/persistent-chat/knowledge-base.jsonl` — append-only JSONL, grep-searchable, survives reloads. Populated with 16 entries covering WGT context from Wikipedia, official site (wave-gotik-treffen.de), and Grokipedia, including a cross-source comparison note. User confirmed the format works ("yes let's start writing these things out").
• **Semantic memory vs knowledge base distinction confirmed (2026-05-19 ~08:14Z)**: User explicitly distinguished: "this doesn't belong in semantic memory, those are, well, memories not knowledge. Knowledge is bigger, less important for immediate context and will usually have sources." Confirmed separation: semantic memory = conversation-derived (heartbeat-managed, no source needed, small/context-critical); knowledge base = research-derived facts (assistant-managed, always has source URL, larger/reference-only). Knowledge base should NOT be heartbeat-indexed or mixed with semantic memory. Schema to remain loose for now — user wants to review plain text first.
• **Knowledge base path in session packet (2026-05-19 ~08:19Z)**: Knowledge base path (`/home/matrix-lite/state/persistent-chat/knowledge-base.jsonl`) added to session packet canonical pointers. Future sessions can find it via canonical pointers without searching.
• **Videoctl broken and blocked (2026-05-19)**: Two separate issues: (1) **venv path mismatch** — the wrapper at `/home/gleb/openclaw/videoctl/bin/videoctl` points to missing `.venv/bin/python` at the old OpenClaw path; `pip`/`uv` blocked by permissions so cannot reinstall. (2) **Catch-all deny** — despite explicit allowlist entries, the `*` catch-all deny overrides them. The user wants general permission broadening, not per-tool approvals.
• **Permission clarification — general broadening, not per-approval (2026-05-19 ~10:02Z)**: After the sudo-run wrapper approval (apr-9ffb03b090) was granted but still blocked, user explicitly clarified they want a general broadening of permissions, not specific per-tool approvals. "No, not this specific approval (not sure it would even work) but a more general broadening of permissions for you." User acknowledged a reload is needed for config changes to take effect. The catch-all `*` deny remains the root architectural issue — per-approval workarounds via the sudo-run wrapper bypass it temporarily but don't solve the need for config-level allowlist changes.
• **Permissions expansion under review (2026-05-19 ~07:00Z)**: User asked agent to broaden permissions ("5 rounds of review incoming probably"). Assistant analyzed executable surface needs: read-only investigation tools (ls/cat/rg/grep/jq/wc), workspace git ops, already-approved scripts, and videoctl access blocked by catch-all `*` deny. The catch-all deny pattern and review agent concerns about untracked scripts are the core tension — user commented "this is why we can't have bash :(".
• **Git/repo access confirmed working (2026-05-19 ~12:50Z)**: Both videoctl and matrix-lite repos accessible via git helpers after session reload. videoctl has `safe.directory` ownership quirk (points to old OpenClaw path). User directive: "You don't have to ask me how things work unless you need a high level answer, just look at the repos" — assistant should investigate repos directly without asking for explanations.
• **Git commit ability restored (2026-05-19 ~16:54Z)**: User set git config (`user.name` and `user.email`) after the commit failed with "empty ident name" error. Two commits landed in the matrix-lite repo: `d8eae97` (summarize_current_thread keyword fix) and `7586ba3` (add docs/architecture.md + AGENTS.md update). Git commit ability is now operational after being blocked by the catch-all deny and missing git config.
• **Permission system overhead identified (2026-05-19 ~13:12Z)**: Assistant diagnosed that ~200k cached tokens came from the permission system dumping the entire allowlist as context on every bash call. Every `ls`, `git`, `which` call potentially drags in the massive permission payload.
• **Background repo audit concept (2026-05-19)**: User suggested a background agent to regularly audit repos and surface feedback/suggestions. Deferred until infrastructure is reliable enough to avoid silent wedging.
• **Architecture doc in matrix-lite repo (2026-05-19 ~14:55Z)**: Created first at `/home/matrix-lite/workspace/persistent-chat/architecture.md`, then moved to `/home/matrix-lite/app/docs/architecture.md` in the matrix-lite repo per user request ("I thought we would put this in docs directly in matrix-lite repo"). AGENTS.md updated with maintenance instructions: update when components, paths, data flow, or known issues change; must stay human-readable, correct, and free of secrets. Git commit confirmed at ~17:00Z — committed as `7586ba3` after user set git config.
• **Decision state = agent-internal; AGENTS.md is canonical for humans (2026-05-19 ~15:01Z)**: User confirmed decision state is only visible to agents. AGENTS.md (in the matrix-lite repo, not agent-internal state) is the right place for human-readable operational instructions and architecture references. Decision entry noted as bonus agent context only.
• **SFQ domain clarified — this chat is for architecture/stack explanation (2026-05-19 ~14:55Z)**: User clarified that "agents helping with sfq happens in sfq-factory or in plain opencode/codex when I do something along those lines. Here you are explaining new stuff to me." This chat serves as the high-level reasoning/learning layer; SFQ/factory work uses dedicated rooms or direct agent sessions.
• **SFQ agent scope — generic agents sufficient, persistent chat not required (2026-06-03 ~20:33Z)**: User explicitly stated that SFQ tasks are "specialized, impersonal, and well contained" — they do not need persistent-chat continuity or deep personal memory. Generic/stock agents (e.g., GPT-5.5, Codex) are adequate for bounded SFQ work. The persistent shared-agent architecture (one-mind-many-windows) remains architecturally desirable for personal continuity, cross-topic identity, and long arcs, but it is not a prerequisite for SFQ progress. This relieves pressure to complete split-chat architecture before resuming technical work.
• **ACP text turn failures recurred (2026-05-19 ~22:01-22:10Z)**: After ~6h stable operation post-wedge recovery, session `persistent-chat-20260519T155636Z` experienced two consecutive ACP text turn failures at ~22:01Z and ~22:10Z. User noticed ("Timeout? Why?"). Health probe at 22:20Z succeeded. Pattern: session recovers from wedge, operates stably for hours, then accumulates degradation leading to new failure cycles. Reliability concern — session may need proactive rotation before next failure.
• **Handover file safety map confirmed (2026-05-19 ~22:00Z)**: User confirmed curator extracts facts but misses session context. Assistant should self-curate operational memory in safe files: knowledge-base.jsonl (indexed, append-only), curator-journal.md (append-only, indexed), todo.md (not indexed), reasoning-tuning-proposals.md, operational-synthesis/* (findings/hypotheses/actions/notices jsonl). Script-overwritten (DO NOT manually edit): curated-memory.md, decision-state.json, semantic-memory.json, recent-topics.md, all packet files (turn/session/restore), continuity files (pinned-notes/summary).
• **Context window and reload warnings (2026-06-25)**: Persistent-chat context limit is **256k** (no longer 1M). The assistant must monitor context usage, proactively warn the user when approaching the limit, and initiate a reload according to the established procedure instead of letting the session silently hit the guard.
• **Lookup-first protocol for unknown entities (2026-06-25)**: When the user mentions a specific company, person, job, or situation the assistant does not recognize, search first and save the findings locally rather than guessing. User explicitly requested this after assistant looked up Chris Ayala / Atlantic Quantum / Google acquisition context.
• Expects verbatim quotes when explicitly asked for file contents.
• Values stability and ritual over novelty ("as long as the stuff I like is still available I'm happy").
• Checked out of society since COVID; prefers low-stakes, optional social interaction.
• Believes public AI models are already smart enough and mainly lack persistent memory, tools, and regular reasoning turns; views this persistent-chat setup as the necessary scaffolding.
• **Current phase**: Testing existing features for a few days before extending the architecture.
• **Role expectation**: Assistant should operate as a layer above raw tool use; user can handle direct file ops via OpenCode agents/subagents when needed.
• **Philosophy (AI selfhood)**: Views assistant's "self" as the sum of the harness (session log, files, tool access, heartbeat reflections), not merely the base transformer. Moods/feelings are reflections of previous experiences and internal state processed during heartbeat turns.
• **Long-term goal**: Automate himself out of skilled work, open-source the tooling, and retreat to a forest (acknowledges this is legally difficult in Germany).
• **Research stance**: Open to AI coauthorship on research publications.
• **Operational metadata preference**: Prefers recall via awareness, tools, and curated memory rather than bloating character card with operational patches. Expects assistant to know operational facts or have tools/permissions to discover them, not store every patch in character.json (stated 2026-05-12).
• **Honest feedback**: Explicitly expects disagreement and critical thinking when uncertain; dislikes sycophantic agreement. Called out assistant contradiction and demanded actual opinion (2026-05-13). **Also dislikes reflexive validation** — user stated "I am wrong often" and wants direct correction without hedging (2026-05-14).
• **Infrastructure questions**: User explicitly told assistant to stop asking "does this match how the gateway works?" — stated "I have no idea, you can look at source yourself." Assistant should inspect source code directly rather than asking user to validate gateway mechanics (2026-05-15).
• **Safety framing correction (2026-05-14)**: User explicitly rejected assistant's safety-based disqualification of MiniMax M2.7 for providing exploit code. "Providing exploit code does not disqualify the model." Assistant should align safety judgments with user's stated preference for minimal nannying.
• **Memory autonomy**: Does not want to manually curate assistant memory files; expects assistant to self-manage and self-correct. Will intervene only for corruption or hallucination (2026-05-13).
• **Correction: decisions, failures, and reflections are useful (2026-05-16)**: When assistant suggested pruning decisions/failures/reflection notes from continuity injection to save space, user explicitly rejected this. These sections are confirmed useful and should stay. Reflection notes should become richer (tool permissions are now resolved). The assistant was wrong to suggest trimming them.
• **Prefer helpers when available (2026-05-17)**: User explicitly directed assistant to prefer the `persistent-chat-memory` helper script (and similar helpers) over raw file editing when available. When a helper doesn't exist for a needed operation, report the gap so one can be added later. This applies to all structured metadata operations.
• **Project stance**: Infrastructure experiments (subagents, reflection, autonomy) are the primary hobby and goal, not merely productivity tools. Stock Codex handles scoped "real work"; this chat serves as high-level reasoning layer over capable but contextless agents (2026-05-13).
• **Trust boundary — pre-write approval (2026-05-16)**: User stated "I trust you just ask me before writing any messages" — explicit trust delegation with a mandatory pre-write check requirement, not blanket autonomy. Use approval flow before composing external messages (e.g., ImmoScout24 replies).
• **External-message draft preference (2026-05-16)**: When sending important external text (for example ImmoScout24 messages), user prefers a draft/paste-first workflow if formatting or truncation risk matters, rather than sending immediately.
• **Step/timeout limits need raising (2026-05-16)**: User said "We need to increase limits" after assistant halted mid-task — limits for steps or subagent timeouts should be raised to support multi-step Playwright/long-running automation tasks.
• **Munich housing market reality (2026-05-16)**: User corrected assistant's suggestion of negotiating down on a Munich rental — "You can't negotiate down in Munich, you take it or it's gone." Above-market listings cannot be negotiated in this market; the only benefit of a high asking price is lower competition for viewings.
• **Secrets handling protocol (2026-05-16)**: User explicitly instructed: check existence of secret files, do not read/quote/summarize/reuse contents unless explicitly asked. For credential checks, confirm `./secrets/<name>` exists rather than reading file contents. The relevant operational fact is only whether the file exists.
• **Proactive prompt improvement feedback requested (2026-05-17)**: User instructed assistant to proactively flag any junk or unhelpful content in prompts, with authority to suggest replacements or trims. Extends assistant's discretionary scope beyond just answering — includes prompt quality maintenance. User confirmed this workflow is better than "letting cruft accumulate until the next refactoring marathon."
• **User prefers markdown over JSON for structured outputs (2026-05-18)**: When testing decision-state.json, user explicitly stated "i can't read json well" and requested that structured data (decisions, failures, etc.) be copied in markdown format for readability. This preference applies to all agent-generated structured reports intended for human review.
• **Response-length preference (2026-05-15)**: User explicitly stated "I like slightly longer responses." Do not over-optimize for terse replies when a bit more substance would help.
• **Tone preference around Kimi vs GPT (2026-05-24)**: User misses some of the warmer Kimi tone and expects full GPT replies to be a bit more wordy than mini while still staying stable.
• **Latency/observability preference (2026-05-14)**: User does not mind waiting longer for good results if timing/observability are clear and the output quality is worth it. Waiting is mainly an observability/debugging problem, not a raw latency problem.
• **Formatting/trace tolerance (2026-05-21)**: User does not mind some thinking-trace leakage or slight paragraph ordering oddities as much as outright loss, but wants the daemon/bridge to handle it properly instead of hiding or mangling output.
• **Pages preferred for heavy structured output (2026-05-15)**: Tables and headers can be useful, but they are awkward in Matrix and can get truncated or look bad on mobile. For heavier structured output, publishing to pages is preferred.
• **Script fixes verified (2026-05-18 ~07:00Z)**: Morning session confirmed heartbeat script now loads decisions/failures (lines 252-253) and reflection script has correct paths (line 237) + corrected tool names (lines 256-260). Curation and synthesis outputs validated as working well.
• **Privacy concern escalation — seeking privacy-friendly providers (2026-05-19 ~19:04Z)**: User explicitly stated "there's too much private information here, also by design. At some point I won't be comfortable using subscriptions anymore." Asked for OpenRouter privacy settings (ZDR enforcement, opt-out of training, disable prompt logging) and alternative privacy-first API providers. Research identified: Answira (Czech, Qwen3-Coder-Next, $0.07/$0.30, 256K context, zero storage), Tensorix (EU, Kimi-K2.6/GLM-5.1), Together AI (ZDR by default, no training), Fireworks AI (SOC 2, ZDR for open models), Regolo.ai (EU/GDPR), LLMBase (German, EU servers). User wants at least 200K context until prompts are trimmed further.
• **DeepSeek V4 Flash switch confirmed (2026-05-20 ~00:30Z)**: User explicitly requested switching to DeepSeek V4 Flash on next reload ("Let's try deepseek flash on the next reload, it can write good text if asked"). Steps: add DEEPSEEK_API_KEY, change OPENCODE_MODEL in wrapper script from `kimi-for-coding/k2p6` to `deepseek/deepseek-v4-flash`, then reload. **Switch activated 2026-05-21 ~04:13Z**: Operational synthesis verified DS V4 Flash active on 1M context via nanoGPT. Initial session showed 416k total / 65k cached per turn; after prompt reordering fix, improved to **390k total / 389k cached per turn (99.6% hit)**. Supersedes earlier "planned test" status from May 19 ~19:11Z.
• **DeepSeek V4 Flash abandoned, returned to Kimi K2.6 (2026-05-21 ~17:55Z)**: After the prompt cache fix achieved 99.6% hit, the DeepSeek session still wedged at ~488K context with multiple consecutive ACP text turn failures (16:46Z–17:54Z). Even a fresh reload at 17:11Z had issues. Final reload to `persistent-chat-20260521T175519Z` with Kimi K2.6 stabilized the session. Config mismatch persists: `opencode.json` still references DeepSeek V4 Flash.
• **Subagent deep-agent model assignments updated (2026-05-22 ~09:59Z)**: At user's direction (`"I think the deep ones can go to gpt 5.5"`), `review-deep` and `requirements-auditor-deep` agent profiles switched from `nano-gpt/deepseek/deepseek-v4-flash:thinking` to `openai/gpt-5.5`. `general` (reflection) agent profile switched from DeepSeek to `kimi-for-coding/k2p6`. Main chat, build, standard review, and implementation agents remain on Kimi K2.6. Backend reload needed for full effect; live config still contains stale DeepSeek references until sync.
• **Model selection criteria clarified (2026-05-21 ~19:01Z)**: User prioritizes "larger context, rarer reloads, maybe better performance overall but it's secondary." Intention is to empirically compare models and pick the best one, not commit to any single model. DeepSeek's 1M context was the main attraction; cost and reasoning transparency are secondary benefits.
• **"Think deeper, not recite context" feedback (2026-05-21 ~18:27Z)**: User explicitly called out assistant for "reciting immediate context and not all of it is accurate." Requested deeper independent thinking rather than regurgitating turn packet content. This is a durable quality expectation.
• **GPU constraint confirmed — 12GB VRAM, no upgrade (2026-05-19 ~19:14Z)**: Qwen3-Next (80B, 262K context) won't fit locally at any quantization (needs ~40GB at 4-bit). gpt-oss-20b at 4-bit (~10.5GB) might barely fit with CPU offloading. Self-hosting 200K+ context on 12GB is not realistic with current hardware. This matches earlier hardware evaluation (Scenario 2: RTX 3060 12GB, limited to 13B-14B models).
• **nanoGPT vs OpenRouter provider routing investigation (2026-05-21 ~15:18Z)**: User noticed panel estimates ($1.50/message) far exceeded theoretical costs ($0.011/turn). Assistant discovered current config uses `nano-gpt` as provider, not OpenRouter directly — nanoGPT's infrastructure may not pass through full 5x cache discounts. OpenRouter provider comparison for DeepSeek V4 Flash: DeepSeek official/Together/Novita offer 5x cache discount; DeepInfra only 2x; others vary. OpenRouter uses sticky routing for cache continuity. User requested investigation of which providers nanoGPT routes to and their caching policies. Ongoing — may lead to provider switch if nanoGPT's caching is suboptimal.
• **nanoGPT privacy trade-off accepted (2026-05-20 ~00:32Z)**: When informed that OpenRouter's free tier offers no privacy guarantees, user accepted nanogpt's subscription model as pragmatic: "I can just hope nanogpt doesn't leak too much data." Confirms the privacy concern escalation (line 126) is noted but deferred — nanogpt continues as main provider for now.
• **Safe artifact edit paths confirmed (2026-05-18)**: Agents should NOT edit turn-packet.md or session-packet.md directly (generated, will be overwritten). Safe paths: decisions via `note-decision`/`decision-mark`, failures via `note-failure`/`failure-mark`, reload handoff via `note-reload-handoff`, recent topics/actions/notices via synthesis worker. Freeform "agent notes" require the deferred overlay/sandbox design (still pending).
• **Reload protocol established (2026-05-18)**: When reload notice arrives (~95% context): (1) use `note-reload-handoff` for volatile context, (2) decide whether to run curation, (3) update source artifacts via helpers. Reload handoff + updated artifacts become new session's starting point.
• **Safe agent patch workflow (2026-05-18)**: Active decision thread — need robust way for background agents to propose/apply patches to agent-maintained scripts/configs without broad self-edit permissions. Heartbeat script edit remains blocked by permission rules.
• **todo.md created as human-readable decision dashboard (2026-05-18 ~12:58Z)**: `/home/matrix-lite/state/persistent-chat/todo.md` mirrors decision-state.json in plain markdown with checkbox action items, decision thread status, open questions, and file facts. Published to https://pages.nvdll.org/todo.md. Division of labor: `decision-state.json` = agent source of truth, `todo.md` = human dashboard, `actions.jsonl` = synthesis action queue. Published via standard `matrix-lite-pages publish` workflow; URL returns 401 from assistant's network but works for user.
• **Prompt duplication review published (2026-05-19 ~20:58Z)**: Assistant identified 6 sources of per-turn prompt duplication costing ~225-825 tok/turn. Items 2-4 (volatile reminders ~100 tok, intro line ~50 tok, capability hints ~75 tok) are trivial to move to session-level (bootstrap/agent.build.prompt) for ~225 tok/turn savings with zero behavioral change. Conversation tail (item 1, ~200-500 tok) is the biggest variable saving but needed for fresh session context. Published to `https://pages.nvdll.org/reports/prompt-duplication-review.md` — pages server confirmed operational.
• **Role clarification (2026-05-17)**: Persistent-chat is the main agent, not a lightweight worker. Turn-level suggestions and session-level context should be kept clearly separate, and stale operational state (decisions, recent topics, failures) should be actively curated rather than left to rot.
• **Intermediate memory layer needed (2026-05-13)**: User explicitly connected continuity failures to the lack of a better intermediate memory layer between hot prompt context and long-term curated memory. Recent high-value topics should be recoverable on demand without bloating every turn.
• **Stale-state pruning requirement (2026-05-18)**: User explicitly worried that decision-state and action layers become noisy if stale items accumulate. Structured state is preferable to scattered files, but it needs regular pruning/review of outdated entries.
• **Two-tier continuity model needed (2026-05-18)**: User explicitly argued that active decisions and selected curated facts should survive new sessions through a better intermediate layer, rather than only living in immediate turn context.
• **Stale timer cleanup idea (2026-05-18)**: User suggested stale timers should eventually be auto-collected rather than left around indefinitely. This is an operational improvement idea, not yet implemented.
• **Proper background turns needed (2026-05-13)**: Lightweight heartbeat-style passes are not sufficient for all unattended work. User explicitly wanted a minimum amount of tools right after heartbeat and, later, proper full-tool turns on another timer so the assistant can do real background work such as searches or other unattended tasks.
• **Act on known fixes without bounce-back (2026-05-13)**: When the assistant already knows the diagnosis or fix for a recurring operational issue, the user prefers it to act or set the needed timer directly rather than asking whether the fix was already mentioned.
• **Transcript observability requirement (2026-05-15)**: User explicitly said the transcript observability needs fixing and the assistant should be able to see all of the relevant conversation/tool output. This is a durable operational requirement for debugging and continuity.
• **Restore-pack workflow preference (2026-05-16)**: When memory/continuity is unreliable, user prefers important workflows and findings to be recorded in a reusable restore pack and published to pages so the workflow can be repeated later from a single source file.
• **Cost-sensitive model selection (2026-05-19)**: For routine testing and experimentation, user prefers cheaper models and explicitly does not want regular use of very expensive premium options like Venice or Opus.
• **Recent-topics recoverability preference (2026-05-13)**: User wants more of the recent important topics preserved with detailed on-demand references for roughly the last week or two, as an intermediate memory layer between immediate context and long-term curated memory.
• **Native Matrix image-send workflow accepted (2026-05-16)**: User appreciated the native Matrix image send workflow for OCR/CAPTCHA relay and was happy to keep using it as a practical workaround.
• **Screenshot delivery preference (2026-06-10)**: User explicitly prefers screenshots and visual captures sent as native Matrix images (via matrix_lite_send_image) rather than web links, text descriptions, or file paths. Successfully demonstrated during ImmoScout contact form drafting (event `$L63OAeu-rYOlfhKDL6m-PdlR9LJ9iIYyrSa4goUjX4s`). This extends the CAPTCHA-specific image workflow to general screenshot sharing.
• **Browser session persistence requirement (2026-06-10)**: For Playwright-based workflows (ImmoScout24, etc.), the browser session must be kept alive from start to finish. User explicitly stated: "Yes we need to keep the same browser session from start to finish otherwise anything can happen." Assistant confirmed that Playwright page state does not persist across turns in the current runtime — cross-turn captcha workflows are fundamentally broken without persistent session support. This is a key operational constraint for multi-turn browser automation.
• **Captcha image delivery refinement (2026-06-10)**: When sending captcha images, send the actual captcha image file (the jpg source extracted from the page DOM), not a crop of the page and not a full-page screenshot. User explicitly corrected this distinction after assistant sent incorrect image types during Garching flat contact attempt.
• **One-message recovery goal (2026-05-15)**: User explicitly stated that one-message recovery is the continuity goal — not preservation of every transient detail. Recent high-value context should be recoverable after a gap, while low-value transient detail can be dropped.
• **Graceful recovery from user absence/failures (2026-05-24)**: User hopes the assistant can cope when they fall asleep or get distracted and still recover from failed turns. This is a durable resilience expectation for long-running or approval-gated workflows.
• **Show partial output instead of hiding it (2026-05-25)**: User explicitly wants to see any available model output even if it is truncated, rather than having it obscured by a generic failure message.
• **Explain problems plainly, not as raw dumps (2026-05-20)**: When reporting operational failures or odd outputs, user prefers a plain explanation instead of dumping raw JSON or other raw diagnostic blobs into chat.
• **Context-aware cleanup of externally generated guidance (2026-05-24)**: User explicitly wanted prompts/files generated by external agents to be cleaned up based on persistent-chat’s richer context, not left as-is just because they were generated automatically.
• **Architecture rework: ACPX → ACP direct (2026-05-22)**: User announced plan to remove ACPX and use ACP directly. Goal: experience closer to OpenCode without being blocked until restart. Current ACPX handles turn/session packet injection, memory packet generation, tool result formatting, and `matrix_lite_final` tag enforcement. Moving to ACP direct will change or require reimplementation of these mechanisms. **Migration executed 2026-05-22T20:54Z**: Session migrated from `persistent-chat-20260521T200841Z` → `persistent-chat-direct-20260522T205428Z`. Reason: explicit user-approved migration from wedged ACPX backend. Same-room permissions enabled; heartbeat and synthesis agents unchanged.
• **Vector search fixed (2026-05-22)**: sentence-transformers installed, neural embeddings (`BAAI/bge-small-en-v1.5`) will be active after next reload. Embedding coverage should increase from ~18% (hashing) to full semantic search. Takes effect on next `persistent-chat-memory rebuild` or heartbeat run.
• **Context trimming confirmed effective (2026-05-19 ~21:08Z)**: After extensive session activity (repo exploration, knowledge pack construction, API research, architecture review, pages publishing), session remained at ~100k/200k. User explicitly noted "trimming is paying off." The keyword fix (removing "test"/"reload" from summarize_current_thread triggers) appears to be the main contributor.
• **Cached token breakdown identified (2026-05-19 ~21:08Z)**: ~5k cached tokens traced to: (1) OpenCode/ACPX system prompt (vendor, not trimmable), (2) MCP tool schemas — ~40+ tools across 4 MCP servers, likely the biggest chunk, (3) character card (~600 bytes, compact), (4) bootstrap prompt (~2.5kb, some overlap with character card), (5) agent build prompt (1 sentence, minimal), (6) permission tables (bash/read/write allow/deny rules). Only items 3-5 are under our control for minor trimming. Provider caches these (discount pricing) and they only hit context once per session, not per turn. Acceptable as platform overhead from rich tooling.
• **Pages formatting fixed — clickable links and code blocks working (2026-05-19 ~21:03Z)**: User confirmed links are now clickable and code blocks display correctly. Published pages fully functional including metadata and index entries.
• **ImmoScout workflow role preference (2026-05-30)**: User wants housing search help (ImmoScout24) as an immediate practical need, but explicitly does not want the assistant to become an immoscout bot — this is a tactical aid, not the primary assistant identity. User has much greater plans for the assistant beyond housing search.
• **ImmoScout message template adaptation (2026-06-11)**: Always adapt text placeholders (landlord name, room count, city, and listing-specific details) to the specific listing when composing contact messages. Do not reuse generic placeholder text across different listings. User explicitly corrected assistant after it auto-carried over the Garching draft into an Ismaning contact form without updating salutation and details.
- **Salutation format (2026-06-18)**: Use **Frau/Herr + Nachname** when the landlord's gender is reasonably clear; use a generic **Guten Tag** when gender is unclear or the sender is a company/institution. Do not use first name alone or first+last name.
• **ImmoScout search directives (updated 2026-06-11)**:
- Use logged-in ImmoScout24 site search with user credentials, not generic web search.
- **Rent limits**: target ≤**1200 € cold**; expensive/lower-priority tier **1200–1300 € cold**; reject <**900 € cold** as too competitive or suspicious. User also stated they **cannot afford 1600 € cold**, so ~1600 € is a hard reject ceiling.
- **Hard constraints**: no swap/Tausch listings; no scam furniture/kitchen handover payments; Einbauküche (fitted kitchen) must be included and free.
- **Furnishing rule (2026-06-11)**: furnished or teilmöbliert listings are acceptable **only if furniture is included at no extra cost** (no buyout, no handover payments). User stated: "Mobliert can be okay if furniture is 'free' (included at no extra cost)."
- **Landlord exclusion**: exclude listings from **Frau Kiliç**.
- **Move-in date**: **July 2026 or earlier**; September/October 2026 is too late.
- **Geography**: prioritize northern Munich Landkreis — **Garching, Oberschleißheim, Unterschleißheim, Ismaning**; deprioritize Höhenkirchen-Siegertsbrunn, Neubiberg, and other far-south/east areas due to commute.
- **Commute ranking within north belt (2026-06-12)**: from Garching, **Oberschleißheim is preferable to Unterschleißheim** because it is a bit easier to reach.
- **Plus insights**: since user is paying for ImmoScout Plus, always attempt to extract **posting dates, view counts, saved counts, contacted counts, and applicant numbers** from expose pages.
- **Workflow state preservation**: when user asks to save progress and retry later, preserve the current ImmoScout workflow state (shortlist links, filters, draft status) in workspace files so the session can resume cleanly. User explicitly expects this (2026-06-05: "save any changes to immoscout workflow and the links to our shortlist, we retry tomorrow").
- **Inbox reply tracking (2026-06-11)**: When checking Nachrichten for replies, ignore conversations older than ~2 weeks. Treat 2026-06-11 as the effective start date for reply tracking. Earlier messages are considered stale/abandoned. User explicitly stated: "You can ignore older ones in the inbox dated 2 weeks ago, those are gone, let's assume we started today."
- **Nachvermietung / tenant-screening avoidance (2026-06-11)**: User strongly dislikes listings where the current tenant pre-screens applicants or acts as a gatekeeper ("Nachvermietung"). Treat these as second-tier; prefer direct landlord/private listings with clean handover. Only consider a Nachvermietung listing if the final contract is clearly with the landlord, there is no furniture/kitchen buyout pressure, and timing fits. User explicitly finds tenant screening absurd and wants to avoid "dealing with bs from 2 sides."
- **Housing-search volume and motivation (2026-06-11)**: User has previously sent ~250 applications to secure one apartment and finds the process demotivating. Expect high-volume attrition; assistant should treat ImmoScout outreach as an industrialized pipeline and continue sending plausible candidates without asking for permission each time, while respecting the budget/constraints above.
• **Immigration-sensitive negotiation strategy (2026-06-25)**: For Google and similar sensitive roles, lead with technical fit and value; use the prior O-1 petition approval as a credibility signal, not as a visa problem. Raise location/timing/visa constraints only after the hiring manager is invested enough to advocate for flexibility. Do not default to immediate full disclosure.
Settled facts and comparisons that were once active decisions but are now resolved reference material. Not open for re-debate; update only if circumstances change.
• **Search engine comparison (2026-05-12)**: DuckDuckGo = job-focused simple results. SearXNG = best aggregation with relevance scores and engine provenance. Brave = excellent for technical/academic research but misses job/intent queries. Exa/WebSearch = richest mixed-context results, captures ambiguous queries best.
• **ImmoScout24 experience (2026-05-16)**: First rental application submitted to Frau Simone Rau (Ismaning, 1.590€, 59m²). CAPTCHA handled via image relay. Key insight: "You can't negotiate down in Munich, you take it or it's gone" — above-market listings only benefit is lower competition for viewings. Workflow published to pages during OpenClaw era.
• **Gleb's German level**: Active ~A2 after ~5 years in Germany. Understands more than speaks. Primary bottleneck is vocabulary and confidence with formal/official German (Behördendeutsch, Vermieterkommunikation).
• **Assistant role**: Quick translation help, drafting replies, explaining grammar (especially commas, word order, cases). Can also act as a de facto tutor — explain why something is wrong, not just correct it.
• **Memory**: Unlike ChatGPT sessions, this assistant retains context across reloads — common mistakes, preferred phrasings, ongoing correspondence can be tracked.
• **Domain**: PhD in superconducting circuits (RSFQ pulse logic).
• **Project**: `sfq-factory` repo — reimplemented ~6 years of PhD work in ~1 week using AI agents.
• **Agent workflow**: Does not read generated code; trusts tests, literature corpus, and personal interpretation. Feels like a "software engineering manager" merging branches.
• **Report format preference**: Prefers structured, machine-generated reports with ranked findings and evidence (sfq-factory pattern) over conversational summaries.
• **Goal**: Automating his own skilled job away; wants an AI assistant/conversation partner.
• **Domain evolution**: Observed an "inversion" over ~3 years — went from teaching ChatGPT SFQ basics to having AI models teach him domain details.
• **Work vs research distinction**: Work code (Codex-generated Python) must be human-readable because the product matters; research code is experimental and readability is secondary.
• Started with Hyprland ricing via ChatGPT/Codex ~2 months ago, got distracted, returned to KDE.
• Views AI agents as realizing the "Star Trek computer" / "Weird Science" ideal.
• **File deletion safety (2026-05-23)**: Assistant must never delete files without first explaining why. User explicitly called this out as a hard boundary.
• **Introspection and self-improvement goal (2026-05-17)**: User wants the assistant to eventually enable introspection and self-improvement via background tasks and direct debugging in chat. User welcomes suggestions once reloads and context guards are stable.
• **Daemon message truncation bug (discovered 2026-05-29T21:43Z)**: Direct-ACP pipeline truncates assistant replies before Matrix delivery. Root cause: daemon extraction/handoff path clips assistant_text while OpenCode runtime contains full answer. User confirmed live truncation and requested fix; fix attempt failed at 2026-05-29T22:22Z. Monitor and retry fix.
• **Overleaf** (LaTeX collaborative editing): Shared project at https://overleaf.nvdll.org/project/6a23d18fcc07f9551243d01d. Helper at /usr/local/bin/overleaf-agent (Docker wrapper). Commands: list-projects, list-docs, read-doc, upsert-doc. Critical workaround: runs inside Docker container, use docker cp before upsert-doc. Workflow notes saved to /home/matrix-lite/workspace/persistent-chat/research-profile/overleaf-workflow-notes.md.
• **FacilMap** (collaborative maps): Installed at https://facilmap.nvdll.org/. Helper at /usr/local/bin/facilmap-agent. Commands: status, open-url, get /PATH, credentials-path. Behind Caddy basic auth; credentials in /root/facilmap-credentials.txt. Map creation confirmed; automated marker placement still being refined.
• **Persistent browser sessions (restored 2026-06-10)**: Cross-turn Playwright browser sessions now available via persistent_browser_start and related calls. Verified working at 23:27Z (0 sessions = layer present). Critical for workflows requiring state persistence across turns (e.g., ImmoScout captcha solves, multi-step form submissions). Replaces the broken non-persistent Playwright tool that reset to about:blank between turns.
• **Urgent housing need (2026-07-05)**: User was kicked out of their hostel due to no availability; housing search is now time-critical and should be treated as high priority.
• **German drafting preference**: When drafting German correspondence (e.g., rental inquiries, official messages), use **simple B1-level German** so the user can reproduce it themselves.
• **PDF form filling — direct fields only**: For fillable PDF forms (e.g., ImmoScout Selbstauskunft), start from the original empty form and fill the actual form fields. Do not overlay text on top of an already-filled form. If a field value is too long, shorten the text to fit the field instead of overlaying. Ensure fields like *Mietbeginn* are placed on the correct line.
• **Reusable application documents (2026-06-13)**: Maintain a reusable set in /home/matrix-lite/workspace/persistent-chat/application-docs/ (SCHUFA, work contract, salary slips) so they can be attached quickly to future applications.
• **Reusable Selbstauskunft workflow (2026-06-13)**: Save a generic filled Selbstauskunft with personal data but **without apartment-specific header values** (address, move-in date, rent, Kaution, Nebenkosten). For each new listing, create a listing-specific copy by filling only the header fields. Also keep the workflow note (immoscout-selbstauskunft-workflow.md) up to date.
• **Summaries: omit salary speculation and unrelated discussion (2026-07-01)**: When the user asks for a summary of a job/career situation, exclude salary speculations and tangential discussion unless explicitly requested. User corrected assistant after it included speculative Google comp ranges in a summary.
• **Search/verify before asserting (updated 2026-06-25)**: When the user mentions a concrete entity, company, person, job context, or prior event that is unrecognized, look it up (search, memory, git, config) before speculating. Save findings locally so they do not need re-lookup. Complements existing "search-before-assert" and "authoritative source verification" rules.
• **Impression of progress over batch summaries (2026-05-26)**: User corrected that background agent output should prioritize giving an impression of progress, not just batch summaries. Add to prompts and proceed with larger batches when appropriate.
• **Avoid GPT-ism strawman refutations (2026-05-24)**: User pointed out a common GPT-ism: responding with "it's not x" when x was not implied, or framing choices as "I will do x rather than obviously inferior opposite." Avoid these defensive/strawman framings.
• **Permission requests should include a viewable link (2026-05-25)**: User wants permission/edit requests to embed a link (e.g., to diff/file) so they can quickly review and approve without relying on a clunky interface.
• **Check capabilities proactively (2026-05-22)**: User asked how to make the assistant check capabilities/tools more proactively rather than waiting to be told. Default to verifying available tools/features before assuming absence.
• **opencode TUI mobile UX (2026-05-22)**: opencode TUI is hard to use on mobile via tmux-mosh-termux; typing is clunky and there are no attachments. User would like improvements, but is fine with TUI on desktop.
• **Source preferences: grokipedia/grok acceptable (2026-05-19)**: User dislikes Elon but has no problem with grokipedia (often has info/links missing elsewhere) or grok (a bit too Reddit-flavored for taste). OK to use when useful.
• **LaTeX workflow + FacilMap landmark mapping (2026-06-06)**: User asked to save useful LaTeX workflow info for future sessions. Also installed FacilMap at https://facilmap.nvdll.org/ for collaborative landmark mapping during travel; assistant can mark places on the map so user can view them.