# 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/` 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 - URLs should be on separate lines in both `list` and `show` output, not buried in long text lines - 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 - Note skill DB path is `db/note.sqlite`, not `skills/note/notes.db` (the latter is empty/wrong) - Workspace safety guard workaround: write Python runner scripts to `tmp/` using `uv run --script` with inline dependency declarations (`# /// script` metadata); graph scripts (`wiki_graph_lint.py`, `wiki_graph_extract.py`) cannot be run directly — use wrapper script in `tmp/` that imports and calls them ## Agent Model Selection - Prioritizes agentic performance, correct tool calling, and overall result quality - 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 - 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 - 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 ## Wiki - Wiki content is in Czech - Wiki compile rule: ambiguous/conflicting sources must NOT be force-compiled — leave in `cml/raw/` or move to `_hard/`, log reason to `log.md` - Wiki lint rule: lint is report-only, never make destructive edits to existing wiki pages without user confirmation - Wiki compilation runs in isolated background sessions without user interaction (batch/hands-off mode) - Wiki idempotency rule: if wiki pages already exist for a source, treat as done, move raw file to `_done/`, skip reconciliation - Every processed source must be moved out of `cml/raw/` to prevent cron reprocessing - Wiki source pages need explicit `slug` field (e.g. `slug: source-flash-attention`) and `graph.node_id` + `canonical: true` to avoid UNIQUE constraint collision with concept/entity pages sharing the same filename stem - `wiki_graph_extract.py` patched: skip duplicate slugs (first wins) instead of crashing on `nodes.slug` UNIQUE constraint ## Reminder System - Reminder check script: `/home/nanobot/.nanobot/workspace/skills/remind/scripts/remind_check.py` - Execution: `exec` via `/home/nanobot/.local/bin/uv run