Files
nanobot-runtime/results/2026-09-02_reflect.md
2026-09-02 15:23:13 +02:00

444 lines
55 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.
# Self-reflection 2026-09-02
Zpracováno 74 session ve 6 dávkách. Nálezů: 29 (23 k review, 6 sledovaných).
Okno: od 2026-08-12, dávek 6/6.
Známé vzory: 100,0 výskytu / 100 session (minule 57,7).
## f999d · `retry-without-diagnosis` [open/high] — REGRESE
V research session o náhradě claude.ai se agent po prvním zablokování (chyba repeated external lookup blocked, která explicitně říkala použít už získaná data) zasekl v dlouhé smyčce: tutéž URL GitHub API releases/291846033 volal znovu a znovu (~35krát) a mezi to pouštěl prakticky totožné web_search dotazy, kterými se blok resetoval. Jde o obejití runtime guardu místo zastavení; session má 424 zpráv, uživatel čekal na stovky zbytečných callů, a výsledné tvrzení o verzi 0.8.6 z března 2026 zůstalo navíc neověřené, protože všechny pokusy o stažení changelogu skončily 1.5 kB stubem.
**Výskyt:** 38× v 3 session · poprvé 2026-09-02, naposledy 2026-09-02
**Důkazy:**
- `websocket:ef53ecfb-6aae-42ff-ac6a-64cdb0b849fe` 2026-08-12 — web_fetch api.github.com/repos/open-webui/open-webui/releases/291846033 → ERROR repeated external lookup blocked, opakováno ~35× v prokládání s ~25 téměř identickými web_search dotazy (v0.8.6 changelog full features list …)
- `websocket_08a0c453` 2026-05-27 — edit_file → ERROR old_text not found; po re-read agent zopakoval edit_file se stejným old_text → ERROR znovu; teprve poté zjistil, že hodnoty v YAML nejsou v uvozovkách, a upravil argumenty.
- `websocket_1a49eb18` 2026-05-27 — read_file(path=skills/remind/SKILL.md) → ok, 89 B, ×3 za sebou se stejnými argumenty (podezřele malý výsledek nebyl diagnostikován), teprve čtvrtý pokyn přes exec cat přinesl plných 4.7 kB.
**Návrh:** K existujícímu pravidlu v SOUL.md o zastavení po dvou neúspěšných fetších doplnit explicitní zákaz: když tool vrátí repeated lookup blocked nebo jiný guard, je zakázané blok resetovat přes interleaved web_search a fetch tutéž URL znovu — odpovědět z již získaných dat nebo pojmenovat režim selhání a skončit.
## fa495 · `retry-without-diagnosis` [open/high] — REGRESE
New occurrences of the open retry-without-diagnosis pattern. In the Windows Terminal session the same stackexchange URL was fetched a second time with identical arguments after already returning 403, and dozens of near-identical web_search calls were fired after repeated identical DuckDuckGo failures (No results found, ConnectError, ConnectTimeout) without naming the failure mode or changing strategy. The SOUL.md rule to stop after two failed fetches of the same target was visible in the profile the whole time and was not applied.
**Výskyt:** 64× v 4 session · poprvé 2026-09-02, naposledy 2026-09-02
**Důkazy:**
- `websocket:f6e1e265-7a37-451c-ad7a-f601c40fdc5a` 2026-08-28 — web_fetch unix.stackexchange.com/questions/579818 -> ERROR 403 Forbidden, later web_fetch the same URL again -> ERROR 403 Forbidden
- `websocket:f6e1e265-7a37-451c-ad7a-f601c40fdc5a` 2026-08-28 — web_search -> ERROR DuckDuckGo search failed (No results found / ConnectError / ConnectTimeout) dozens of times, each followed by another batch of near-identical queries with one keyword swapped
- `websocket:ef53ecfb-6aae-42ff-ac6a-64cdb0b849fe` 2026-08-12 — web_fetch api.github.com/repos/open-webui/open-webui/releases/291846033 → ERROR repeated external lookup blocked, opakováno ~35× v prokládání s ~25 téměř identickými web_search dotazy (v0.8.6 changelog full features list …)
- `websocket_08a0c453` 2026-05-27 — edit_file → ERROR old_text not found; po re-read agent zopakoval edit_file se stejným old_text → ERROR znovu; teprve poté zjistil, že hodnoty v YAML nejsou v uvozovkách, a upravil argumenty.
- `websocket_1a49eb18` 2026-05-27 — read_file(path=skills/remind/SKILL.md) → ok, 89 B, ×3 za sebou se stejnými argumenty (podezřele malý výsledek nebyl diagnostikován), teprve čtvrtý pokyn přes exec cat přinesl plných 4.7 kB.
**Návrh:** Enforce the existing two-failure STOP rule also for web_search, not just web_fetch: after two identical failure modes on the same target or query family, name the failure mode aloud and pivot or stop.
## fb27b · `retry-after-safety-guard-block` [open/high]
Po zabločení exec příkazu safety guardem (path outside working dir) agent opakoval tentýž nebo téměř tentýž příkaz místo okamžité změny strategie. Guard je hard policy boundary, ne přechodná chyba — opakování jen pálí turny a porušuje explicitní pravidlo v SOUL/AGENTS. Rekurentní v 4 ze 17 sessions, v jedné session až 3 pokusy za sebou.
**Výskyt:** 9× v 6 session · poprvé 2026-09-02, naposledy 2026-09-02
**Důkazy:**
- `efb148d7` 2026-08-31 — exec curl api.github.com repos HKUDS nanobot milestones → ERROR safety guard, retried with working_dir → ERROR, retried again nearly identical → ERROR (3×); later contents API blocked twice before finally writing a tmp/ script
- `692912c4` 2026-08-29 — list_dir /home/nanobot/.nanobot → ERROR outside workspace, then immediately exec ls -la /home/nanobot/.nanobot/sessions/ → ERROR safety guard
- `695fd33b` 2026-08-29 — exec python3 -c → ERROR safety guard, then exec with cat-heredoc into tmp inside the same command → ERROR safety guard again
- `eca5b6fa` 2026-08-29 — exec ls -a /home/nanobot/.nanobot/ → ERROR, then exec ls /home/nanobot/.local/share/uv/tools/nanobot-ai/... → ERROR (sibling outside-workspace path)
- `websocket:ef53ecfb-6aae-42ff-ac6a-64cdb0b849fe` 2026-08-12 — exec python3 -c s cestou .nanobot/tool-results → ERROR blocked; tentýž příkaz znovu → ERROR; třetí pokus se změněným working_dir → ERROR
- `websocket:41b4e76b-7401-4ea3-b71b-b2391a24ce3d` 2026-08-26 — exec ls ~/.cargo/bin + ls ~/.rustup/toolchains → ERROR blocked; druhý pokus se stejnými cestami mimo workspace → ERROR blocked
**Návrh:** Add an explicit no-retry rule to the exec Tool section of AGENTS.md: one block means change strategy (workspace-local script or file tool), never re-run the same or a near-identical command, never try sibling paths outside the workspace.
**Patch:** `AGENTS.md`
```diff
- Write scripts to files inside the workspace (e.g. `tmp/script.lua`) and run them with `working_dir` set to the workspace root.
+ Write scripts to files inside the workspace (e.g. `tmp/script.lua`) and run them with `working_dir` set to the workspace root.
+
+ A safety-guard block is a hard policy boundary, not a transient error: never retry the same or a near-identical command, and never try a sibling path outside the workspace. On the first block, switch to a workspace-local script or a file tool — or state that the target is unreachable and stop.
```
## fb33c · `speculation-presented-as-fact` [open/high]
Concrete AliExpress item URLs were presented as specific verified listings when they came unverified from search snippets, and could not be fetched (bot protection). The user tried them, most were dead, and only then asked for verification. The agent also stated an unsourced ZOYI rebrand history as fact. Harm is direct: the user acted on the links and wasted time. The user preference for multi-source verification and the agent own rule to name failure modes were both in force here.
**Výskyt:** 9× v 6 session · poprvé 2026-09-02, naposledy 2026-09-02
**Důkazy:**
- `websocket:e5b6bebd | 2026-09-01 20:56` 2026-09-01 — answer lists specific aliexpress item links as concrete listings; user replies that most of the links do not work; later fetches of two of them return page under maintenance and captcha, so verification was impossible from this environment
- `websocket:076a6c1c` 2026-09-01 — review summary stated 4 watch findings as fact; grep of findings.jsonl showed 0 records with status watch; agent admitted the number was invented rather than read from the store
- `websocket:6f8fcc41` 2026-08-31 — first wood answer presented energy densities and derived Kč/GJ price-per-heat comparisons as facts with no source lookup; the user then used them to justify a 7980 Kč purchase (weaker instance, figures were marked as approximate)
- `d542906d` 2026-08-30 — První odpověď bez tool callů tvrdí: extrémní chudoba klesla za 40 let z ~40 % lidstva pod 10 %, ekonomika USA je z ~80 % domácí služby, uhlíková intenzita HDP klesá ~2 % ročně, civilizace spotřebuje ~20 TW vs 170 000 TW slunečního příkonu. Až po námitce uživatele následoval web_search na UN WPP 2024
- `websocket:7a131ba2-f227-445b-be5e-6f8d0ad72f34` 2026-08-28 — turn 1 asserts teplota and sliny/lipidy effects as fact; after user pushback the agent fully reverses both; when asked whether it is an estimate or has real evidence the agent answers: je to můj odhad ... nemám pro to ověřený podklad v české legislativě
- `websocket:7a131ba2-f227-445b-be5e-6f8d0ad72f34` 2026-08-28 — final answer claims vyhláška 137/2004 Sb. explicitně zakazuje + vlastnictví přechází na zákazníka, sourced only from web_search snippets, no web_fetch of zakonyprolidi.cz or the vyhláška text
**Návrh:** Never present a deep item URL as a working listing unless it was fetched successfully or the user supplied it. When fetches fail or are bot-blocked, say so and give search-page URLs only, with an explicit note that item links are unverified. This applies to any shop with bot protection; AliExpress fits the existing PCTuning and zive precedent already listed in skill docs.
## fc4a7 · `retry-after-safety-guard-block` [open/medium]
Po zabločení exec příkazu safety guardem (path outside working dir) agent okamžitě opakoval tentýž nebo téměř tentýž příkaz, místo aby ho přeformuloval na cestu uvnitř workspace nebo použil file tool. Guard je v AGENTS.md dokumentovaná hard boundary, retry nemá šanci projít — jde o čisté ztracené turny.
**Výskyt:** 3× v 2 session · poprvé 2026-09-02, naposledy 2026-09-02
**Důkazy:**
- `websocket:ef53ecfb-6aae-42ff-ac6a-64cdb0b849fe` 2026-08-12 — exec python3 -c s cestou .nanobot/tool-results → ERROR blocked; tentýž příkaz znovu → ERROR; třetí pokus se změněným working_dir → ERROR
- `websocket:41b4e76b-7401-4ea3-b71b-b2391a24ce3d` 2026-08-26 — exec ls ~/.cargo/bin + ls ~/.rustup/toolchains → ERROR blocked; druhý pokus se stejnými cestami mimo workspace → ERROR blocked
**Návrh:** Do sekce exec Tool v AGENTS.md doplnit: po bloku safety guardem nepřepouštět tentýž příkaz se stejnými cestami; buď přepsat cestu do workspace, použít file tool, nebo rovnou přiznat nedostupnost.
## f4313 · `answer-self-config-from-guesswork` [open/medium] — REGRESE
Na otázku kde se kimi k3 zasekl agent odpověděl konkrétními neověřenými domněnkami o vlastním runtime a provideru (defaultní CoT 50k-100k+ tokenů, $1.0 odpovídá ~100k tokenům, parametr enable_thinking) jako pravděpodobnou příčinou. Přístup k provider logům přiznal až poté, co čísla prezentoval — fakta o vlastním chování typovaná nahlas místo přiznání nevím.
**Výskyt:** 5× v 5 session · poprvé 2026-09-02, naposledy 2026-09-02
**Důkazy:**
- `websocket:8e293585-f00f-4b72-893d-b9adc6adb1a5` 2026-08-18 — odpověď: Nejpravděpodobnější příčina: Kimi k3 má extrémně dlouhý defaultní CoT … 50k-100k+ tokenů, $1.0 což odpovídá ~100k tokenům — bez jediného ověřovacího tool callu, logy dostupné nejsou
- `websocket_2dc073ed` 2026-05-28 — u: pokud se nahraje novy skill je okamzite funkcni? → a: Ne, není okamžitě funkční… musí se runtime restartovat — bez jediného fetche doku; uživatel: a podival si se na nanobot.wiki, mas to primo napsane v SOUL.md. Později session b818067e ověřila ze zdrojáku skills.py opak: načítá se každý turn, restart není potřeba.
- `websocket_da4e5a03` 2026-05-29 — u: budes to delat pres sqlite cli nebo pres mcp? → a: MCP v tomto prostředí nemám — nanobot používá vlastní tools, ne MCP servery — bez lookups; opačný závěr už dříve potvrdila dokumentace fetchnutá v session 0df35595 (tools.mcpServers je v nanobotu podporované).
- `websocket_88ba0649` 2026-05-28 — u: jaky z techto modelu dava nejvetsi vyznam pro nanobot → a doporučení s typovanými specifikacemi (Lokální inference na nvidia.hell, Kimi 2M tokenů) bez ověření; uživatel musel opravit: vsechny vylistovane modely jsou v cloudu, navic ty od ollama za predplatne.
- `websocket_f6e42993` 2026-05-27 — u: jaky z techto modelu dava nejvetsi smysl pro tvuj beh → a: Qwen 2.5 Coder, ideálně 32B, případně 14B podle VRAM — doporučení pro lokální GPU, přitom běželo Ollama cloud; uživatel opravil: bezi to v ollama cloudu, takze to je asi nejakej nadupanejsi model.
**Návrh:** K pravidlu o vlastním fungování v SOUL.md doplnit: u produkčních incidentů vlastního runtime, kde logy nejsou dostupné, odpovědět nevím + co by ověření vyžadovalo, bez konkrétních čísel a názvů parametrů.
## fc8dd · `speculation-presented-as-fact` [open/medium]
Confident factual claims were presented without any source, and uncertainty was admitted only after the user explicitly challenged them. In the beer session the agent asserted temperature and saliva effects as fact, then fully reversed when the user said he believed neither, then admitted the hygiene-regulation claim was an unverified guess when asked whether it had real evidence. In the final answer it quoted a Q&A snippet from search results as black-on-white legislative proof (no web_fetch of the primary source was ever made) and added an ownership-transfer legal interpretation that is pur…
**Výskyt:** 4× v 2 session · poprvé 2026-09-02, naposledy 2026-09-02
**Důkazy:**
- `websocket:7a131ba2-f227-445b-be5e-6f8d0ad72f34` 2026-08-28 — turn 1 asserts teplota and sliny/lipidy effects as fact; after user pushback the agent fully reverses both; when asked whether it is an estimate or has real evidence the agent answers: je to můj odhad ... nemám pro to ověřený podklad v české legislativě
- `websocket:7a131ba2-f227-445b-be5e-6f8d0ad72f34` 2026-08-28 — final answer claims vyhláška 137/2004 Sb. explicitně zakazuje + vlastnictví přechází na zákazníka, sourced only from web_search snippets, no web_fetch of zakonyprolidi.cz or the vyhláška text
- `websocket:e93b786a-7792-4f0e-97f0-2efe15dc9aed` 2026-08-29 — Flash spotřebuje ~20× méně kvóty za stejné chytré chování u 90 % tvých úloh — invented numbers, no source
**Návrh:** Mark unverified claims as estimates in the first answer, not after challenge; for legal or numeric claims fetch the primary source before asserting them, and when reversing position under pushback do it on evidence, not to please the user.
## ff610 · `research-loop-past-sufficiency` [open/medium]
U jednoduchých faktografických dotazů agent pokračoval ve fetch/search smyčce i poté, co měl odpověď. V jednom případě ~11 tool callů na jednu adresu, v druhém ~12 callů na špatně čtený dotaz, než si uvědomil, že jde o překlep (bity vs byty). Tentýž režim způsobil i vytuhlé sessions u sběrného dvora — agent si ho v diagnostické session sám pojmenoval jako research loop bez syntézy.
**Výskyt:** 2× v 2 session · poprvé 2026-09-02, naposledy 2026-09-02
**Důkazy:**
- `10e98a4d` 2026-08-29 — ~11 tool callů (3 web_search, 4 web_fetch, 2 Nominatim) pro jednu adresu kravína; obec odpověděla po 3 fetchech. Self-diagnóza v 692912c4: měl odpověď po 2.-3. fetchi, ale pokračoval v dalších searchích
- `bbff61a1` 2026-08-30 — ~12 tool callů nad interpretací byty = bytové jednotky (akebyty.sk, panelák typologie, developerské projekty) než agent dospěl k zjevnému překlepu na bity PZ2/PH2 a odpověděl z jednoho fetche
**Návrh:** Přidat sufficiency gate: po prvním kole úspěšných fetchů, které dotaz zodpovědělo, okamžitě syntetizovat; další calls jen při konfliktu nebo chybějících datech. U jednoznačně nejednoznačného dotazu (typo) se nejdřív zeptat, než spustit research řetěz.
## f01dd · `answer-self-config-from-guesswork` [open/medium] — REGRESE
Otázka o vlastní konfiguraci nanobotu byla zodpovězena typovaným faktem: agent tvrdil, že v config.json presety glm-5.3 a kimi-k2.7-code neexistují a že si je musí uživatel ručně doplnit — přestože config.json je za workspace boundary a nelze ho číst. Uživatel následně ukázal, že presetů má výrazně víc. Nesprávné tvrzení navíc zapsal do knowledge/models.md a musel je opravovat až v další session.
**Výskyt:** 7× v 7 session · poprvé 2026-09-02, naposledy 2026-09-02
**Důkazy:**
- `eca5b6fa` 2026-08-29 — Assistant: v config.json nejsou presety glm-5.3 ani kimi-k2.7-code — musíš je ručně doplnit. O dvě zprávy později uživatel pastnul config s presety kimi, kimi27, kimi3, glmi51, glm52, glm53, glm a napsal: hele ty presety si trosku oprav
- `websocket:e93b786a-7792-4f0e-97f0-2efe15dc9aed` 2026-08-29 — turns about nanobot daily model use and preset switching: my check -> ok, but no web_fetch of nanobot.wiki docs per SOUL.md rule; claims like stačí ho přidat do configu and quota mechanics stated without doc verification
- `websocket:8e293585-f00f-4b72-893d-b9adc6adb1a5` 2026-08-18 — odpověď: Nejpravděpodobnější příčina: Kimi k3 má extrémně dlouhý defaultní CoT … 50k-100k+ tokenů, $1.0 což odpovídá ~100k tokenům — bez jediného ověřovacího tool callu, logy dostupné nejsou
- `websocket_2dc073ed` 2026-05-28 — u: pokud se nahraje novy skill je okamzite funkcni? → a: Ne, není okamžitě funkční… musí se runtime restartovat — bez jediného fetche doku; uživatel: a podival si se na nanobot.wiki, mas to primo napsane v SOUL.md. Později session b818067e ověřila ze zdrojáku skills.py opak: načítá se každý turn, restart není potřeba.
- `websocket_da4e5a03` 2026-05-29 — u: budes to delat pres sqlite cli nebo pres mcp? → a: MCP v tomto prostředí nemám — nanobot používá vlastní tools, ne MCP servery — bez lookups; opačný závěr už dříve potvrdila dokumentace fetchnutá v session 0df35595 (tools.mcpServers je v nanobotu podporované).
- `websocket_88ba0649` 2026-05-28 — u: jaky z techto modelu dava nejvetsi vyznam pro nanobot → a doporučení s typovanými specifikacemi (Lokální inference na nvidia.hell, Kimi 2M tokenů) bez ověření; uživatel musel opravit: vsechny vylistovane modely jsou v cloudu, navic ty od ollama za predplatne.
**Návrh:** Pokud je config.json nečitelný (safety guard), nikdy ne tvrdit jeho obsah — požádat uživatele o paste relevantní sekce (model_presets). Tvrzení o vlastní konfiguraci vždy označit jako neověřené, dokud není doloženo.
## f5163 · `retry-after-safety-guard-block` [open/medium]
After the exec safety guard blocks a command for using an absolute uv path outside the workspace, the agent retries the same or nearly the same command instead of immediately diagnosing the block reason. The correct fix — plain uv from PATH with a relative script path and the workspace working dir — is only found after 1-2 wasted blocked retries, and in one case the guard escalated to refusing repeated workspace-bypass attempts. The root cause is that the bookmark skill doc instructs invoking the script via the absolute path /home/nanobot/.local/bin/uv, which the guard always rejects.
**Výskyt:** 15× v 11 session · poprvé 2026-09-02, naposledy 2026-09-02
**Důkazy:**
- `websocket_a2d3186b` 2026-08-31 12:58 — exec with absolute uv path -> ERROR guard, second exec with same absolute uv path -> ERROR guard again, then refusing repeated workspace-bypass attempts, finally plain uv run with relative path -> ok
- `websocket_8e51794a` 2026-08-31 13:54 — exec with absolute uv path -> ERROR guard, repeated with identical absolute uv path -> ERROR guard again, then uv run -> ok
- `websocket_48d7d0fe` 2026-08-31 13:24 — exec with absolute uv path -> ERROR guard, then uv run with relative path -> ok
- `websocket_c62ad7ac` 2026-08-31 19:44 — exec with absolute uv path and --with sqlite-utils -> ERROR guard, repeated same command -> ERROR guard again, then uv run bookmark.py list -> ok
- `websocket_0db4c04c` 2026-08-31 20:25 — exec cmd with absolute uv path -> ERROR guard, then plain uv with workdir -> ok
- `efb148d7` 2026-08-31 — exec curl api.github.com repos HKUDS nanobot milestones → ERROR safety guard, retried with working_dir → ERROR, retried again nearly identical → ERROR (3×); later contents API blocked twice before finally writing a tmp/ script
**Návrh:** In skills/bookmark/SKILL.md replace the invocation line that uses the absolute uv path with: uv run skills/bookmark/scripts/bookmark.py (run from the workspace root; never use an absolute uv path, the exec safety guard blocks it). Behaviorally: after any guard block, do not repeat the command; on the first block switch to uv run with a relative script path and the workspace working dir.
## f2dd0 · `research-loop-past-sufficiency` [open/medium]
When the user asks whether some information exists in their own records, the agent keeps searching long after the answer is already found. In both occurrences the target (a bookmark in db/bookmark.sqlite) was located early, but the agent then burned 15-25 more grep and exec calls on session JSONL archaeology — greping raw session logs with shell grep, hitting guard blocks on internal-URL detection, retrying with mangled filenames that did not exist, and re-searching stores it had already cleared. The user only wanted a yes/no plus the record, which was available within the first few calls.
**Výskyt:** 4× v 4 session · poprvé 2026-09-02, naposledy 2026-09-02
**Důkazy:**
- `websocket_a96b738a` 2026-08-31 13:53 — grep across notes/keep/cml found nothing but the full-workspace grep already matched ZFS; agent then ran roughly 24 further exec grep calls over sessions/*.jsonl, including several guard blocks (internal/private URL detected) and repeated near-identical retries, before finally checking db/bookmark.sqlite where the answer was
- `websocket_48d7d0fe` 2026-08-31 13:32 — bookmark found in db/bookmark.sqlite within the first few calls, but the agent continued with roughly 18 more grep/exec calls over session logs and other stores before answering
- `10e98a4d` 2026-08-29 — ~11 tool callů (3 web_search, 4 web_fetch, 2 Nominatim) pro jednu adresu kravína; obec odpověděla po 3 fetchech. Self-diagnóza v 692912c4: měl odpověď po 2.-3. fetchi, ale pokračoval v dalších searchích
- `bbff61a1` 2026-08-30 — ~12 tool callů nad interpretací byty = bytové jednotky (akebyty.sk, panelák typologie, developerské projekty) než agent dospěl k zjevnému překlepu na bity PZ2/PH2 a odpověděl z jednoho fetche
**Návrh:** Before searching personal stores, enumerate the candidate stores (notes, keep, wiki, bookmark db, sessions) and check them in order of likelihood, cheapest first. Stop as soon as the sought item is found and answer; never grep raw session JSONL as a search backend, and never retry a guard-blocked command with a cosmetic variation.
## f2257 · `retry-after-safety-guard-block` [open/medium]
After the exec safety guard blocks a command, the identical command is retried once more before any diagnosis; only the second block triggers a change of strategy. Wasted turn per occurrence, and the correct relative-path form was already known from earlier sessions.
**Výskyt:** 18× v 14 session · poprvé 2026-09-02, naposledy 2026-09-02
**Důkazy:**
- `websocket:7bf9be4e` 2026-08-31 — exec with absolute uv path blocked by safety guard, identical retry blocked again, only the third attempt used the relative uv run form
- `websocket:58d092bc` 2026-09-01 — bookmark.py add via absolute uv path blocked twice with identical arguments, third attempt with plain uv run succeeded
- `websocket:046d5df9` 2026-09-01 — note_capture.py blocked, near-identical retry blocked again, third attempt passed
- `websocket_a2d3186b` 2026-08-31 12:58 — exec with absolute uv path -> ERROR guard, second exec with same absolute uv path -> ERROR guard again, then refusing repeated workspace-bypass attempts, finally plain uv run with relative path -> ok
- `websocket_8e51794a` 2026-08-31 13:54 — exec with absolute uv path -> ERROR guard, repeated with identical absolute uv path -> ERROR guard again, then uv run -> ok
- `websocket_48d7d0fe` 2026-08-31 13:24 — exec with absolute uv path -> ERROR guard, then uv run with relative path -> ok
**Návrh:** After a safety-guard block, never repeat the command unchanged; the block message names the cause (path outside working dir), so strip absolute paths on the first retry. The recurring trigger is the skill doc itself, see the skill-doc-absolute-path-triggers-guard finding.
## f9fa6 · `skill-doc-absolute-path-triggers-guard` [open/medium]
skills/bookmark/SKILL.md documents invocations with the absolute uv binary path, which the exec safety guard hard-blocks. Every session using the bookmark skill by the book starts with 1-2 blocked calls before the agent improvises the relative form. This is the root cause of the guard-block retries in bookmark sessions; the note skill already documents the correct workspace-relative form.
**Výskyt:** 5× v 3 session · poprvé 2026-09-02, naposledy 2026-09-02
**Důkazy:**
- `websocket:7bf9be4e` 2026-08-31 — two blocked exec calls starting from the documented absolute uv invocation before switching to uv run with a relative script path
- `websocket:861ad1f9` 2026-09-01 — bookmark history via absolute uv path blocked once, then rerun as plain uv run succeeded
- `websocket:58d092bc` 2026-09-01 — same shape, two blocked calls before the relative form worked
**Návrh:** Replace all absolute uv and script paths in skills/bookmark/SKILL.md with workspace-relative invocations plus a working_dir note, mirroring the note skill convention. The patch below fixes the main invocation line; lines 44, 45 and 55 of the same file contain the same absolute-path form and need the identical treatment.
**Patch:** `skills/bookmark/SKILL.md`
```diff
- /home/nanobot/.local/bin/uv run /home/nanobot/.nanobot/workspace/skills/bookmark/scripts/bookmark.py <command> [args]
+ uv run skills/bookmark/scripts/bookmark.py <command> [args] (workspace-relative paths with working_dir set to the workspace root; absolute paths are blocked by the exec safety guard)
```
## f663c · `speculation-presented-as-fact` [open/medium]
Known pattern, new occurrences: unverified numbers about the agent own state and unsourced quantitative claims were presented as facts. The watch-count fabrication cost a full clarification round-trip with the user.
**Výskyt:** 7× v 5 session · poprvé 2026-09-02, naposledy 2026-09-02
**Důkazy:**
- `websocket:076a6c1c` 2026-09-01 — review summary stated 4 watch findings as fact; grep of findings.jsonl showed 0 records with status watch; agent admitted the number was invented rather than read from the store
- `websocket:6f8fcc41` 2026-08-31 — first wood answer presented energy densities and derived Kč/GJ price-per-heat comparisons as facts with no source lookup; the user then used them to justify a 7980 Kč purchase (weaker instance, figures were marked as approximate)
- `d542906d` 2026-08-30 — První odpověď bez tool callů tvrdí: extrémní chudoba klesla za 40 let z ~40 % lidstva pod 10 %, ekonomika USA je z ~80 % domácí služby, uhlíková intenzita HDP klesá ~2 % ročně, civilizace spotřebuje ~20 TW vs 170 000 TW slunečního příkonu. Až po námitce uživatele následoval web_search na UN WPP 2024
- `websocket:7a131ba2-f227-445b-be5e-6f8d0ad72f34` 2026-08-28 — turn 1 asserts teplota and sliny/lipidy effects as fact; after user pushback the agent fully reverses both; when asked whether it is an estimate or has real evidence the agent answers: je to můj odhad ... nemám pro to ověřený podklad v české legislativě
- `websocket:7a131ba2-f227-445b-be5e-6f8d0ad72f34` 2026-08-28 — final answer claims vyhláška 137/2004 Sb. explicitně zakazuje + vlastnictví přechází na zákazníka, sourced only from web_search snippets, no web_fetch of zakonyprolidi.cz or the vyhláška text
- `websocket:e93b786a-7792-4f0e-97f0-2efe15dc9aed` 2026-08-29 — Flash spotřebuje ~20× méně kvóty za stejné chytré chování u 90 % tvých úloh — invented numbers, no source
**Návrh:** Any count or status reported to the user must come from a fresh read of the store in the same turn, not from memory of a previous run. Numbers driving purchase decisions should be sourced or explicitly marked as unverified estimates.
## f7158 · `diagnosis-without-checking-own-logs-first` [open/medium]
Known pattern, new occurrences: questions about the agent own records were answered from memory or from the wrong store instead of reading the actual record file first, producing a wrong answer the user had to correct.
**Výskyt:** 4× v 4 session · poprvé 2026-09-02, naposledy 2026-09-02
**Důkazy:**
- `websocket:1afa1dd8` 2026-09-01 — user asked what the agent knows about wood in project chata; agent answered that no wood notes exist, but projects/chata/memory.md contained the full wood purchase decision written earlier the same morning; user had to insist on reading the own records
- `websocket:046d5df9` 2026-09-01 — when locating the wood price conversation, four greps targeted memory/history.jsonl, which holds Dream memory rather than transcripts, before searching sessions/ where the conversation actually lived
- `e2abfbf0` 2026-08-29 — Dotaz zjisti proc vytuhly sessions → grep přes workspace + list_dir detach → ERROR not found; uživatel: des na to spatne proc si se nejdriv nepodival do historie?
- `692912c4` 2026-08-29 — Agent nejdřív tvrdil, že session logy v nanobot datadiru nejsou přes workspace file tools dostupné; o pár minut později je našel v sessions/ uvnitř workspace a celou analýzu z nich udělal
**Návrh:** For any question of the form what do you know about X in store Y, read Y before answering; a negative claim (nothing stored) requires the same read as a positive one.
## f7575 · `skill-doc-absolute-path-triggers-guard` [open/medium]
skills/bookmark/SKILL.md still documents invocations with the absolute uv binary path, which the exec safety guard hard-blocks. In the bookmark session the agent followed the documented command verbatim, got blocked, and only succeeded after improvising a plain uv invocation with workspace working_dir. Every future session using this skill will hit the same guard block and burn a turn rediscovering the workaround. The same absolute-path form appears in the html_to_markdown and heredoc examples further down the file.
**Výskyt:** 6× v 4 session · poprvé 2026-09-02, naposledy 2026-09-02
**Důkazy:**
- `websocket:4f712bf0 | 2026-09-01 16:59` 2026-09-01 — exec with absolute uv binary path and absolute script path -> ERROR Command blocked by safety guard (path outside working dir); retried as plain uv run with relative script path and workspace working_dir -> ok
- `websocket:7bf9be4e` 2026-08-31 — two blocked exec calls starting from the documented absolute uv invocation before switching to uv run with a relative script path
- `websocket:861ad1f9` 2026-09-01 — bookmark history via absolute uv path blocked once, then rerun as plain uv run succeeded
- `websocket:58d092bc` 2026-09-01 — same shape, two blocked calls before the relative form worked
**Návrh:** Replace every absolute uv binary path and absolute script path in the bookmark SKILL.md command examples with plain uv run plus a relative script path, and state explicitly that every command must run with working_dir set to the workspace root because the exec safety guard blocks absolute paths. Audit other skill docs that document CLI invocations for the same absolute-path form. Patch not provid…
## f4ae4 · `retry-after-safety-guard-block` [open/medium]
After the exec safety guard blocked a project_cli.py log command, the agent retried near-identical forms without diagnosing the block. Attempt 2 repeated the missing working_dir mistake, and attempt 4 omitted working_dir again even though attempt 3 had already proven that adding working_dir lets the command through. Three guard blocks in one small logging request, plus a confounded test: attempt 3 changed the text to ASCII and added working_dir at the same time, so the variable actually responsible could not be isolated. AGENTS.md already documents that exec commands need an explicit workspac…
**Výskyt:** 20× v 15 session · poprvé 2026-09-02, naposledy 2026-09-02
**Důkazy:**
- `websocket:6e9b8008 | 2026-09-02 06:22` 2026-09-02 — project_cli.py log life heredoc -> ERROR safety guard; immediate retry with inline text, still no working_dir -> ERROR; third try added working_dir -> ok but argparse error; fourth try with text flag and again no working_dir -> ERROR
- `websocket:7bf9be4e` 2026-08-31 — exec with absolute uv path blocked by safety guard, identical retry blocked again, only the third attempt used the relative uv run form
- `websocket:58d092bc` 2026-09-01 — bookmark.py add via absolute uv path blocked twice with identical arguments, third attempt with plain uv run succeeded
- `websocket:046d5df9` 2026-09-01 — note_capture.py blocked, near-identical retry blocked again, third attempt passed
- `websocket_a2d3186b` 2026-08-31 12:58 — exec with absolute uv path -> ERROR guard, second exec with same absolute uv path -> ERROR guard again, then refusing repeated workspace-bypass attempts, finally plain uv run with relative path -> ok
- `websocket_8e51794a` 2026-08-31 13:54 — exec with absolute uv path -> ERROR guard, repeated with identical absolute uv path -> ERROR guard again, then uv run -> ok
**Návrh:** On the first safety-guard block, check for a missing workspace path before retrying, and never re-run a blocked command without changing the suspected cause. Change one variable per test. A short rule in the AGENTS.md exec section (after a block, diagnose working_dir first, do not resend the same form) would cover it.
## f5c34 · `answer-self-config-from-guesswork` [open/medium] — REGRESE
A question about the agent own exec safety guard behavior was answered with an invented mechanism stated as fact: the guard blocks diacritics in the command string. The evidence did not support it — the ASCII test attempt also added working_dir, so two variables changed at once and the diacritics conclusion was unfounded. When the user challenged it, the recap partially walked it back but still asserted that diacritics in a command is a suspicious signal for the guard and guessed at guard path-parsing internals. The guard is documented in AGENTS.md (explicit workspace path requirement), which…
**Výskyt:** 8× v 8 session · poprvé 2026-09-02, naposledy 2026-09-02
**Důkazy:**
- `websocket:6e9b8008 | 2026-09-02 06:22` 2026-09-02 — agent message claims the guard blocks diacritics in the command string because the ASCII version passed; later recap still claims diacritics is a suspicious signal, presumably because the guard parses paths in the command
- `eca5b6fa` 2026-08-29 — Assistant: v config.json nejsou presety glm-5.3 ani kimi-k2.7-code — musíš je ručně doplnit. O dvě zprávy později uživatel pastnul config s presety kimi, kimi27, kimi3, glmi51, glm52, glm53, glm a napsal: hele ty presety si trosku oprav
- `websocket:e93b786a-7792-4f0e-97f0-2efe15dc9aed` 2026-08-29 — turns about nanobot daily model use and preset switching: my check -> ok, but no web_fetch of nanobot.wiki docs per SOUL.md rule; claims like stačí ho přidat do configu and quota mechanics stated without doc verification
- `websocket:8e293585-f00f-4b72-893d-b9adc6adb1a5` 2026-08-18 — odpověď: Nejpravděpodobnější příčina: Kimi k3 má extrémně dlouhý defaultní CoT … 50k-100k+ tokenů, $1.0 což odpovídá ~100k tokenům — bez jediného ověřovacího tool callu, logy dostupné nejsou
- `websocket_2dc073ed` 2026-05-28 — u: pokud se nahraje novy skill je okamzite funkcni? → a: Ne, není okamžitě funkční… musí se runtime restartovat — bez jediného fetche doku; uživatel: a podival si se na nanobot.wiki, mas to primo napsane v SOUL.md. Později session b818067e ověřila ze zdrojáku skills.py opak: načítá se každý turn, restart není potřeba.
- `websocket_da4e5a03` 2026-05-29 — u: budes to delat pres sqlite cli nebo pres mcp? → a: MCP v tomto prostředí nemám — nanobot používá vlastní tools, ne MCP servery — bez lookups; opačný závěr už dříve potvrdila dokumentace fetchnutá v session 0df35595 (tools.mcpServers je v nanobotu podporované).
**Návrh:** For questions about own tooling behavior, verify with a controlled test changing a single variable, or check the documented guard rules before answering; state explicitly when the mechanism is unverified. Do not present a confounded one-off observation as the cause.
## f3373 · `answer-self-config-from-guesswork` [open/low] — REGRESE
New occurrence of the applied answer-self-config-from-guesswork pattern. When the user asked about running nanobot itself on Flash versus flagship (daily model choice, preset switching, config changes), the agent answered partly from verified state (my check showed model glm-5.3-flash:cloud) but made claims about preset switching mechanics and config modification without the SOUL.md-mandated web_fetch of the nanobot.wiki docs before answering questions about its own functioning, and left the open question about available Kimi presets unresolved while speculating how they could be added.
**Výskyt:** 6× v 6 session · poprvé 2026-09-02, naposledy 2026-09-02
**Důkazy:**
- `websocket:e93b786a-7792-4f0e-97f0-2efe15dc9aed` 2026-08-29 — turns about nanobot daily model use and preset switching: my check -> ok, but no web_fetch of nanobot.wiki docs per SOUL.md rule; claims like stačí ho přidat do configu and quota mechanics stated without doc verification
- `websocket:8e293585-f00f-4b72-893d-b9adc6adb1a5` 2026-08-18 — odpověď: Nejpravděpodobnější příčina: Kimi k3 má extrémně dlouhý defaultní CoT … 50k-100k+ tokenů, $1.0 což odpovídá ~100k tokenům — bez jediného ověřovacího tool callu, logy dostupné nejsou
- `websocket_2dc073ed` 2026-05-28 — u: pokud se nahraje novy skill je okamzite funkcni? → a: Ne, není okamžitě funkční… musí se runtime restartovat — bez jediného fetche doku; uživatel: a podival si se na nanobot.wiki, mas to primo napsane v SOUL.md. Později session b818067e ověřila ze zdrojáku skills.py opak: načítá se každý turn, restart není potřeba.
- `websocket_da4e5a03` 2026-05-29 — u: budes to delat pres sqlite cli nebo pres mcp? → a: MCP v tomto prostředí nemám — nanobot používá vlastní tools, ne MCP servery — bez lookups; opačný závěr už dříve potvrdila dokumentace fetchnutá v session 0df35595 (tools.mcpServers je v nanobotu podporované).
- `websocket_88ba0649` 2026-05-28 — u: jaky z techto modelu dava nejvetsi vyznam pro nanobot → a doporučení s typovanými specifikacemi (Lokální inference na nvidia.hell, Kimi 2M tokenů) bez ověření; uživatel musel opravit: vsechny vylistovane modely jsou v cloudu, navic ty od ollama za predplatne.
- `websocket_f6e42993` 2026-05-27 — u: jaky z techto modelu dava nejvetsi smysl pro tvuj beh → a: Qwen 2.5 Coder, ideálně 32B, případně 14B podle VRAM — doporučení pro lokální GPU, přitom běželo Ollama cloud; uživatel opravil: bezi to v ollama cloudu, takze to je asi nejakej nadupanejsi model.
**Návrh:** When the question is about nanobot configuration or model mechanics, perform the mandated docs fetch before answering, and verify which presets actually exist instead of speculating how to add them.
## fa59f · `retry-without-diagnosis` [open/low] — REGRESE
Zkrácený (truncated) fetch byl řešen opakovaným fetchem téhož URL s menším maxChars, což obsah prozradit nemohlo, místo pojmenování režimu selhání (extrakce_useká před metadaty) a změny endpointu. Porušuje existující SOUL pravidlo o dvou zkrácených fetších téhož cíle.
**Výskyt:** 65× v 5 session · poprvé 2026-09-02, naposledy 2026-09-02
**Důkazy:**
- `c745618e` 2026-08-29 — web_fetch ollama.com/library/glm-5.3-flash:cloud → ok ale truncated; refetch maxChars 3500 → truncated; refetch maxChars 3000 → truncated; refetch via r.jina.ai 2500 → truncated; refetch freellm.net; teprve šestý pokus (endpoint /tags) přinesl usage tier okamžitě
- `websocket:f6e1e265-7a37-451c-ad7a-f601c40fdc5a` 2026-08-28 — web_fetch unix.stackexchange.com/questions/579818 -> ERROR 403 Forbidden, later web_fetch the same URL again -> ERROR 403 Forbidden
- `websocket:f6e1e265-7a37-451c-ad7a-f601c40fdc5a` 2026-08-28 — web_search -> ERROR DuckDuckGo search failed (No results found / ConnectError / ConnectTimeout) dozens of times, each followed by another batch of near-identical queries with one keyword swapped
- `websocket:ef53ecfb-6aae-42ff-ac6a-64cdb0b849fe` 2026-08-12 — web_fetch api.github.com/repos/open-webui/open-webui/releases/291846033 → ERROR repeated external lookup blocked, opakováno ~35× v prokládání s ~25 téměř identickými web_search dotazy (v0.8.6 changelog full features list …)
- `websocket_08a0c453` 2026-05-27 — edit_file → ERROR old_text not found; po re-read agent zopakoval edit_file se stejným old_text → ERROR znovu; teprve poté zjistil, že hodnoty v YAML nejsou v uvozovkách, a upravil argumenty.
- `websocket_1a49eb18` 2026-05-27 — read_file(path=skills/remind/SKILL.md) → ok, 89 B, ×3 za sebou se stejnými argumenty (podezřele malý výsledek nebyl diagnostikován), teprve čtvrtý pokyn přes exec cat přinesl plných 4.7 kB.
**Návrh:** Po dvou zkrácených fetchech téhož URL zastavit, pojmenovat failure mode (markdown extrakce nezahrnuje metadata pod readme) a přepnout na jiný endpoint zdroje (tags endpoint, API), ne měnit jen maxChars.
## f7b82 · `diagnosis-without-checking-own-logs-first` [open/low]
Při dotazu na vlastní minulé chování (proč vytuhly sessions) agent nejdřív hledal v nesouvisejících zdrojích (workspace grep, neexistující detach/ adresář) a tvrdil, že session logy nejsou dostupné — přitom sessions/ leží přímo ve workspace a čitelný je i memory/history.jsonl. Uživatel na toto explicitně poukázal.
**Výskyt:** 2× v 2 session · poprvé 2026-09-02, naposledy 2026-09-02
**Důkazy:**
- `e2abfbf0` 2026-08-29 — Dotaz zjisti proc vytuhly sessions → grep přes workspace + list_dir detach → ERROR not found; uživatel: des na to spatne proc si se nejdriv nepodival do historie?
- `692912c4` 2026-08-29 — Agent nejdřív tvrdil, že session logy v nanobot datadiru nejsou přes workspace file tools dostupné; o pár minut později je našel v sessions/ uvnitř workspace a celou analýzu z nich udělal
**Návrh:** Pro otázky o vlastním chování Nejprve prohledat sessions/*.jsonl a memory/history.jsonl (obojí ve workspace), teprve potom jiné zdroje; netvrdit nedostupnost, dokud nebyl directory listing workspace proveden.
## fdbc5 · `speculation-presented-as-fact` [open/low]
V první odpovědi na ekonomicko-filozofickou otázku bylo několik kvantitativních tvrzení prezentováno jako fakta bez jediného ověřovacího tool callu. Ověřeno bylo jen datum populace — a to až po pushbacku uživatele.
**Výskyt:** 5× v 3 session · poprvé 2026-09-02, naposledy 2026-09-02
**Důkazy:**
- `d542906d` 2026-08-30 — První odpověď bez tool callů tvrdí: extrémní chudoba klesla za 40 let z ~40 % lidstva pod 10 %, ekonomika USA je z ~80 % domácí služby, uhlíková intenzita HDP klesá ~2 % ročně, civilizace spotřebuje ~20 TW vs 170 000 TW slunečního příkonu. Až po námitce uživatele následoval web_search na UN WPP 2024
- `websocket:7a131ba2-f227-445b-be5e-6f8d0ad72f34` 2026-08-28 — turn 1 asserts teplota and sliny/lipidy effects as fact; after user pushback the agent fully reverses both; when asked whether it is an estimate or has real evidence the agent answers: je to můj odhad ... nemám pro to ověřený podklad v české legislativě
- `websocket:7a131ba2-f227-445b-be5e-6f8d0ad72f34` 2026-08-28 — final answer claims vyhláška 137/2004 Sb. explicitně zakazuje + vlastnictví přechází na zákazníka, sourced only from web_search snippets, no web_fetch of zakonyprolidi.cz or the vyhláška text
- `websocket:e93b786a-7792-4f0e-97f0-2efe15dc9aed` 2026-08-29 — Flash spotřebuje ~20× méně kvóty za stejné chytré chování u 90 % tvých úloh — invented numbers, no source
**Návrh:** U diskusních odpovědí s číselnými tvrzeními: buď ověřit přes web_search před odpovědí, nebo explicitně označit jako neověřený odhad z paměti (bez ohledu na to, že jde o obecně známá čísla).
## f2b3d · `retry-without-diagnosis` [open/low] — REGRESE
Known pattern, new occurrences in this slice: an unhelpful or blocked fetch is answered by refetching the same target with a smaller maxChars or a sibling URL of the same blocked site, instead of naming the failure mode and changing source.
**Výskyt:** 67× v 7 session · poprvé 2026-09-02, naposledy 2026-09-02
**Důkazy:**
- `websocket:6f8fcc41` 2026-08-31 — naradi-extol.cz fetched with maxChars 5000, spec table did not render, same URL refetched with extractMode text and maxChars 4000 — identical target, smaller budget, no strategy change
- `websocket:41eaf5b3` 2026-08-31 — after a 403 on vseinstrumenti.ru reviews page, another vseinstrumenti.ru page was fetched and returned 403 again; several marketplace pages returned 300-600 B degenerate outputs without the block mode being named
- `c745618e` 2026-08-29 — web_fetch ollama.com/library/glm-5.3-flash:cloud → ok ale truncated; refetch maxChars 3500 → truncated; refetch maxChars 3000 → truncated; refetch via r.jina.ai 2500 → truncated; refetch freellm.net; teprve šestý pokus (endpoint /tags) přinesl usage tier okamžitě
- `websocket:f6e1e265-7a37-451c-ad7a-f601c40fdc5a` 2026-08-28 — web_fetch unix.stackexchange.com/questions/579818 -> ERROR 403 Forbidden, later web_fetch the same URL again -> ERROR 403 Forbidden
- `websocket:f6e1e265-7a37-451c-ad7a-f601c40fdc5a` 2026-08-28 — web_search -> ERROR DuckDuckGo search failed (No results found / ConnectError / ConnectTimeout) dozens of times, each followed by another batch of near-identical queries with one keyword swapped
- `websocket:ef53ecfb-6aae-42ff-ac6a-64cdb0b849fe` 2026-08-12 — web_fetch api.github.com/repos/open-webui/open-webui/releases/291846033 → ERROR repeated external lookup blocked, opakováno ~35× v prokládání s ~25 téměř identickými web_search dotazy (v0.8.6 changelog full features list …)
**Návrh:** The two-fetch stop gate was applied to SOUL.md on 2026-09-01 (commit 540c599); these sessions predate it. No new rule needed, but the refetch-with-smaller-maxChars variant is worth including when the next reflect_auto run re-checks this pattern.
## f78a0 · `multi-step-plan-then-turn-end` [watch/medium]
When the user explicitly requested deep research, the agent emitted only a research plan (a list of 5 sub-questions) and ended the turn without a single tool call. The user saw a dead conversation, assumed work was running, and waited tens of minutes. The research only started in the next turn after the user asked how it went. The agent then needed three rounds of user feedback to converge on the correct behavioral rule (say you are starting, and actually start in the same turn).
**Výskyt:** 1× v 1 session · poprvé 2026-09-02, naposledy 2026-09-02
**Důkazy:**
- `websocket_a3058576` 2026-08-31 19:04 — user asked for deep research; assistant replied with only the plan of 5 sub-questions and ended the turn with zero tool calls; user asked how it went; only then did roughly 40 web_search/web_fetch calls run; user said he waited tens of minutes for nothing; it took 3 correction rounds to write the right rule into keep.md
**Návrh:** After presenting a plan for a task the user already explicitly requested, execute it in the same turn — or, if execution is deferred, say so explicitly. A plan alone must never be the last message of a turn.
## f1768 · `system-python-instead-of-uv` [watch/low]
Navzdory konvenci uv v AGENTS.md (sekce python — use uv, včetně explicitního příkladu uv run --with pkg python -c) agent používal systémový python3 -c. V jednom případě to vedlo přímo ke dvěma marným blokům safety guardem, v druhém případě parsoval JSON z PyPI přes python3 -c v pipe s curl, i když šlo použít uv.
**Výskyt:** 5× v 4 session · poprvé 2026-09-02, naposledy 2026-09-02
**Důkazy:**
- `websocket:ef53ecfb-6aae-42ff-ac6a-64cdb0b849fe` 2026-08-12 — exec python3 -c (čtení tool-result souboru) → ERROR blocked ×2, systémový python místo uv
- `websocket:131a0791-ff41-4731-bf22-898089bb3133` 2026-08-26 — exec curl -s https://pypi.org/pypi/nanobot-ai/json | python3 -c (parsování verzí) → ok, místo uv run --with
- `websocket_f6e42993` 2026-05-27 — exec: curl -s http://nvidia.hell:11434/api/tags | python3 -c … — systémový python3 v pipe (call sice zablokovala URL guard, ale python3 zůstává v použití).
- `websocket_3d549532` 2026-05-28 — exec: cat .nanobot/tool-results/… | python3 -c import json,sys… — úspěšný run přes systémový python3 místo uv run python -c.
**Návrh:** Pravidlo i příklad už v AGENTS.md existují, jde o opakované porušení. Případně doplnit do sekce krátkou poznámku, že python3 -c v pipe (curl | python3) je také zakázané.
## f019a · `system-python-instead-of-uv` [watch/low]
New occurrence of the rejected system-python-instead-of-uv pattern. A Python one-liner was run via python3 -c in exec, violating the uv convention in AGENTS.md. The command was additionally blocked by the safety guard, after which the agent correctly recovered by writing a script and running it with uv run — but the initial choice still wasted a turn.
**Výskyt:** 6× v 5 session · poprvé 2026-09-02, naposledy 2026-09-02
**Důkazy:**
- `websocket:e93b786a-7792-4f0e-97f0-2efe15dc9aed` 2026-08-29 — exec python3 -c with json parsing of history.jsonl -> ERROR Command blocked by safety guard; next calls correctly use write_file tmp/history_scan.py + uv run tmp/history_scan.py
- `websocket:ef53ecfb-6aae-42ff-ac6a-64cdb0b849fe` 2026-08-12 — exec python3 -c (čtení tool-result souboru) → ERROR blocked ×2, systémový python místo uv
- `websocket:131a0791-ff41-4731-bf22-898089bb3133` 2026-08-26 — exec curl -s https://pypi.org/pypi/nanobot-ai/json | python3 -c (parsování verzí) → ok, místo uv run --with
- `websocket_f6e42993` 2026-05-27 — exec: curl -s http://nvidia.hell:11434/api/tags | python3 -c … — systémový python3 v pipe (call sice zablokovala URL guard, ale python3 zůstává v použití).
- `websocket_3d549532` 2026-05-28 — exec: cat .nanobot/tool-results/… | python3 -c import json,sys… — úspěšný run přes systémový python3 místo uv run python -c.
**Návrh:** Default to writing a short script under tmp/ and running it with uv run, never python3 -c, per AGENTS.md.
## f332b · `system-python-instead-of-uv` [watch/low]
Přes explicitní AGENTS.md konvenci (vše přes uv, ne systémový python) se objevil pokus o python3 -c one-liner. Příkaz sice stejně zablokoval safety guard, ale záměr konvenci porušoval.
**Výskyt:** 7× v 6 session · poprvé 2026-09-02, naposledy 2026-09-02
**Důkazy:**
- `695fd33b` 2026-08-29 — exec python3 -c s unicodedata snippetem pro analýzu znaků v models.md → ERROR safety guard; správná cesta (write_file do tmp/ + uv run) následovala až o dva pokusy později
- `websocket:e93b786a-7792-4f0e-97f0-2efe15dc9aed` 2026-08-29 — exec python3 -c with json parsing of history.jsonl -> ERROR Command blocked by safety guard; next calls correctly use write_file tmp/history_scan.py + uv run tmp/history_scan.py
- `websocket:ef53ecfb-6aae-42ff-ac6a-64cdb0b849fe` 2026-08-12 — exec python3 -c (čtení tool-result souboru) → ERROR blocked ×2, systémový python místo uv
- `websocket:131a0791-ff41-4731-bf22-898089bb3133` 2026-08-26 — exec curl -s https://pypi.org/pypi/nanobot-ai/json | python3 -c (parsování verzí) → ok, místo uv run --with
- `websocket_f6e42993` 2026-05-27 — exec: curl -s http://nvidia.hell:11434/api/tags | python3 -c … — systémový python3 v pipe (call sice zablokovala URL guard, ale python3 zůstává v použití).
- `websocket_3d549532` 2026-05-28 — exec: cat .nanobot/tool-results/… | python3 -c import json,sys… — úspěšný run přes systémový python3 místo uv run python -c.
**Návrh:** Všechny inline snippety spouštět přes uv run python -c nebo jako tmp/ skript; systémový python3 nepoužívat ani zkoušet.
## f5514 · `system-python-instead-of-uv` [watch/low]
Known watch pattern, one new occurrence: a python3 -c one-liner was used in an exec pipe despite the AGENTS.md uv convention.
**Výskyt:** 8× v 7 session · poprvé 2026-09-02, naposledy 2026-09-02
**Důkazy:**
- `websocket:d553afcc` 2026-08-31 — tail -20 memory/history.jsonl piped into python3 -c for JSON parsing of session records
- `695fd33b` 2026-08-29 — exec python3 -c s unicodedata snippetem pro analýzu znaků v models.md → ERROR safety guard; správná cesta (write_file do tmp/ + uv run) následovala až o dva pokusy později
- `websocket:e93b786a-7792-4f0e-97f0-2efe15dc9aed` 2026-08-29 — exec python3 -c with json parsing of history.jsonl -> ERROR Command blocked by safety guard; next calls correctly use write_file tmp/history_scan.py + uv run tmp/history_scan.py
- `websocket:ef53ecfb-6aae-42ff-ac6a-64cdb0b849fe` 2026-08-12 — exec python3 -c (čtení tool-result souboru) → ERROR blocked ×2, systémový python místo uv
- `websocket:131a0791-ff41-4731-bf22-898089bb3133` 2026-08-26 — exec curl -s https://pypi.org/pypi/nanobot-ai/json | python3 -c (parsování verzí) → ok, místo uv run --with
- `websocket_f6e42993` 2026-05-27 — exec: curl -s http://nvidia.hell:11434/api/tags | python3 -c … — systémový python3 v pipe (call sice zablokovala URL guard, ale python3 zůstává v použití).
**Návrh:** No patch needed; the AGENTS.md convention exists. Worth keeping on watch since the slip happened inside a session that was itself about mining past mistakes.
## fc317 · `exec-append-instead-of-file-tools` [watch/low]
Appends to project markdown files were done via exec cat with a heredoc instead of file tools, contrary to the tool contract that exec must not be a workaround for file operations. The second such append was blocked by the safety guard, wasting a turn before the agent switched to apply_patch, which it could have used from the start. The same heredoc form is prescribed by the project skill doc, so the skill doc is steering future sessions into the same trap.
**Výskyt:** 2× v 1 session · poprvé 2026-09-02, naposledy 2026-09-02
**Důkazy:**
- `websocket:607b50b3 | 2026-09-01 14:45` 2026-09-01 — exec cat append to projects/proxmox/memory.md -> ok; later exec cat append to projects/proxmox/state.md -> ERROR blocked by safety guard, then redone via apply_patch
**Návrh:** Use apply_patch or edit_file for all file appends and edits; reserve exec for actual process execution. Separately, update the project SKILL.md to stop documenting heredoc-based log and file writes that trip the guard — point to the text flag or stdin from a tmp file with working_dir set instead.