Files
nanobot-runtime/memory/MEMORY.md
nanobot addd153e8f dream: 2026-06-10 07:05, 2 change(s)
[MEMORY] User has a chicken coop (chlívek) with pending temperature sensor and MQTT display project
[MEMORY] User has a basement (sklep) with pending key mapping project
[MEMORY] User has recurring task to back up wood.hell to pivo.hell
[MEMORY] User wants to plan Christmas vacation in Panama
[MEMORY] remind skill SQLite redesign completed 2026-06-10, all 43 tests passing
[MEMORY] remind skill: migration tested against 14 live reminders then rolled back, original YAML kept as .bak
[MEMORY] remind skill: soft delete (deleted_at) for reminder removal instead of hard deletion
[MEMORY] remind skill: REMIND_DB env var configures SQLite database path
[MEMORY] remind skill: fixed cron due detection using croniter with ±1s tolerance around current time
[MEMORY] remind skill: fixed enable/disable returning incorrect state by re-fetching reminder after UPDATE
[MEMORY] remind skill: fixed test JSONDecodeError by clearing capsys buffer between consecutive CLI invocations in same test function
[MEMORY-REMOVE] `/remind` critical issues line (one-time reminders fire repeatedly, non-atomic YAML writes, fragile YAML construction, missing list subcommand, no tests, race condition) — superseded by SQLite migration which resolved atomic writes, YAML fragility, race conditions, and added 43 tests
[MEMORY-REMOVE] `/remind` fix priorities line (P0–P3) — superseded by completed SQLite redesign; P0/P2/P3 addressed, P1 YAML serialization replaced by SQLite
2026-06-10 08:34:08 +02:00

125 lines
9.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.
# Long-term Memory
This file stores important information that should persist across sessions.
## Preferences
### Report / result files
- Save important reports to `results/` directory with descriptive, date-prefixed filenames (e.g., `2026-06-02_remind-skill-analysis-and-improvements.md`)
### Script-writing convention
- Location: always save scripts in the `scripts/` directory.
- Language choice:
- Extremely short script (a few lines) -> bash.
- Longer / non-trivial script -> Python.
- Override: if the user explicitly specifies a language or location, their instruction always takes precedence.
### Temporary files
- All temporary files go to `tmp/` directory.
- Clean up after tests and one-off operations.
### Code changes
- User prefers changes to be made in a temporary clone under `workspace/tmp/<repo-name>` for review before applying
## Project Context
- User wants to deploy "grill-me" plugin for Claude Code
- User wants to try "praneybehl/llm-wiki-plugin" for Claude Code — markdown-based thought management / organization
- Daily automated check for new nanobot Docker image releases with Telegram notifications (pending setup)
- Both user and assistant run on the same nanobot Docker image
- Docker CLI is unavailable in the current runtime environment
- Ollama cloud subscription: na požádání zobrazit aktuální využití (usage)
- Ollama cloud limity: 5hodinová session, 7denní týdenní okno
- `/note` skill: backend storage uses SQLite (not markdown)
- `/note` skill: má být deterministický a logovat všechny provedené operace
- `/note` skill: má být rozdělený na kratší prompt + python skript, který provádí operace
- nanobot podporuje cross-channel session continuity přes `unifiedSession: true` v `config.json` pod `agents.defaults`
- Uživatel nemá `unifiedSession` povolený v `config.json` (default false)
- Zapnutí `unifiedSession` sjednotí jen budoucí zprávy; existující session soubory vyžadují ruční merge/rename pro propojení minulých konverzací
- Session files are stored in `/home/nanobot/.nanobot/workspace/sessions/` (confirmed after failed attempts at root `.nanobot/sessions/`)
- User explicitly rejected unified/Mega session approach; prefers connecting to older existing sessions instead
- Telegram slash commands (e.g., `/skills`) are filtered out by `& ~filters.COMMAND` in telegram.py:384; workaround: invoke skills without slash prefix (e.g., `skills` not `/skills`); alternative fix: remove the filter from MessageHandler
- Current nanobot version: v0.2.1; no newer version available as of 2026-06-07
- User wants deterministic IRC-bot-style command dispatch in nanobot where `!command text` invokes a registered Python function or external app and returns output without LLM agent involvement
- User expects nanobot creators to implement custom command registration natively and considers existing workaround solutions unsatisfactory
- Zájem o `:skillname` prefix pro deterministické vyvolání skillu bez LLM deliberace — varianta navrhovaného custom command patche s `!` prefixem
- Nanobot CommandRouter has priority/exact/prefix/interceptor tiers but lacks an extension point for custom command registration with all handlers hardcoded in builtin.py
- Proposed nanobot patch adds a custom command tier to CommandRouter dispatching before session lock configured via `commands` section in config.json supporting exec script and python module/function handler types
- `AgentLoop.__init__` does not accept a `config` parameter; custom command loading must happen in `from_config()` after instance creation, guarded by `_custom_commands_loaded` flag to prevent duplicate registration
- Custom commands are dispatched inline before the session lock, same pattern as priority commands
- Nanobot turn state machine: RESTORE→COMPACT→COMMAND→BUILD→RUN→SAVE→RESPOND→DONE; matched non-priority commands shortcut to DONE skipping BUILD/RUN/SAVE
- Nanobot command handler return contract: OutboundMessage | None — None = fall through to LLM agent (/goal uses this hybrid pattern: returns None → LLM receives modified content)
- No existing `!` prefix handling in nanobot — all current commands use `/` prefix only
- cli_apps tool exists at nanobot/agent/tools/cli_apps.py — relevant for calling external apps from custom commands
- `python` command is unavailable in runtime; `python3` must be used instead
## Agent Model Selection
- Ollama subscription covers all discussed models; price/cost excluded from model comparison criteria
- Prioritizes agentic performance, correct tool calling, and overall result quality
- Primary nanobot agent model: GLM-5.1:cloud (best sustained productivity over long sessions/hundreds of rounds, strong real-world agent benchmarks, no known bugs)
- Alternative nanobot agent model for tool-heavy tasks: Qwen 3.5:cloud (397B variant)
- Conservative fallback nanobot agent model: DeepSeek V3.2:cloud
- OpenRouter is pay-per-token alternative to Ollama subscription for model access
- Gemini Flash via Google AI Studio Free Tier: 15 RPM limit — unusable for agent work; only viable for simple prompts without tool calls
- Gemini Flash via Google AI Studio Tier 1 (paid): 360+ RPM
- Haiku (Claude) via OpenRouter: high rate limits, viable agent model alternative
- Gemini Flash Lite via OpenRouter: high rate limits, viable agent model alternative
- Kimi K2.6 vs GLM-5.1 agent comparison: Kimi leads SWE-Bench (80.2% vs ~77.8%), tool-error recovery (91.8% vs 88.4%), code quality (Tier A vs Tier C); GLM-5.1 leads schema adherence (99.6% vs 98.9%), tool-call latency (+140ms vs +210ms); GLM-5.1 tends to hallucinate non-existent APIs
- Kimi K2.6 has known bug with random switching to Chinese output (reported by Cursor and Reddit users) — critical risk for Czech use
- Both Kimi K2.6 and GLM-5.1 are Chinese-English models without specific Czech training data — both risky for Czech
- For Czech use with Chinese-English models: always explicitly specify language in system prompt (critical for Kimi K2.6, recommended for GLM-5.1)
- Kimi K2.6 supports `preserve_thinking` mode for multi-turn agent scenarios (retains reasoning content across turns)
- minimax-m3:cloud is blocked for nanobot agent deployment due to empty tool result responses (ollama/ollama #16389)
- deepseek-v4-pro:cloud is blocked for interactive nanobot agent use due to 15.4 tok/s and 57s TTFT
- deepseek-v4-flash:cloud is a viable nanobot agent alternative with 1M ctx, MIT license, and ~30-50 tok/s speed
- qwen3.5:397b-cloud is a viable nanobot agent alternative with multimodal support, 1M ctx, 201 languages including Czech, but has speed and accuracy tradeoffs
- devstral-2:123b-cloud is a viable nanobot agent alternative with Terminal-Bench 77.3%, coding-only focus, and 128K ctx limit
- GLM-5.2 does not exist as of June 2026; Z.AI has made no official announcement
- User is interested in switching to GLM-5.2:cloud as primary nanobot agent model if/when it becomes available on Ollama Cloud
- nemotron-3-ultra:cloud released 2026-06-04 and is too new for real-world nanobot agent validation
- Czech language support is a hard requirement for nanobot agent models; Chinese output drift is a deployment blocker
- GLM-5.1:cloud achieves ~198 tok/s on Ollama Cloud
- Agent model comparison report saved to `results/2026-06-07_ollama-cloud-agent-model-comparison.md`
- User prefers Qwen model for deep research tasks (not currently in presets)
- For Ollama Cloud `/detach` research tasks, explicitly specifying the model (e.g., `qwen35`, `gemini`) is more reliable than generic model-agnostic prompts
- Available model presets: gemini-flash, gemini-flash-lite, glm, haiku, kimi, minimax, sonnet
- minimax models have poor error recovery on tool calls — loop on blocked URLs instead of skipping and continuing
## Reminder System
- Reminder check script: `/home/nanobot/.nanobot/workspace/skills/remind/scripts/remind_check.py`
- Execution: `exec` via `/home/nanobot/.local/bin/uv run <script>`
- Empty output → silent exit (no notification sent)
- Each non-empty output line → forwarded as separate Telegram notification
- `/remind` skill podporuje `at` parametr pro jednorázové a `random` pro náhodné časy v okně
- `/remind` SQLite redesign completed 2026-06-10, all 43 tests passing
- `/remind` migration tested against 14 live reminders then rolled back, original YAML kept as .bak
- `/remind` soft delete (deleted_at) for reminder removal instead of hard deletion
- `/remind` REMIND_DB env var configures SQLite database path
- `/remind` fixed cron due detection using croniter with ±1s tolerance around current time
- `/remind` fixed enable/disable returning incorrect state by re-fetching reminder after UPDATE
- `/remind` fixed test JSONDecodeError by clearing capsys buffer between consecutive CLI invocations in same test function
- Daily reminder at 19:00 to install pigeon spikes on the window to the shed
- Weekday reminder at 9:30 to check notebook repair prices for Horáčková
- Daily reminder at 9:10 to order xshoes
- Reminder: "občanka pana Přibyla" — once daily at random time between 8:0021:00
- Weekday reminder at 9:20 for an anti-smoking sign in the elevator
- Aktivní připomínka: Ema měsíc lampička do postele (2× denně náhodně 821)
- Aktivní připomínka: Parkside kultivátor (2026-06-09, 2× náhodně 910)
### NuGet package caching
- Evaluating NuGet package hosting/caching on Linux
- Preferred solution: BaGetter (bagetter/BaGetter) — active BaGet fork with multiple upstream mirror support (PR #269), solves original BaGet's single-upstream limitation
## Personal Notes
- Buy new merino shirt ("koupit nové merino triko")
- Chicken coop (chlívek): pending temperature sensor and MQTT display project
- Basement (sklep): pending key mapping project
- Recurring task: back up wood.hell to pivo.hell
- Plan Christmas vacation in Panama
---
*This file is automatically updated by nanobot when important information should be remembered.*