Files
nanobot-runtime/knowledge/nanobot-internals.md
2026-09-16 09:17:28 +02:00

2.5 KiB

nanobot internals — ověřená fakta ze zdrojáků

Ověřeno proti v0.3.5 (nanobot/agent/skills.py, nanobot/command/router.py, tag v0.3.5 na GitHubu).

Volání skillů

  • $skill-name v textu zprávy = explicitní injekt SKILL.md do turnu.
    • Regex: (?<![\w$])\$([A-Za-z0-9_-]+)get_explicitly_invoked_skills() v skills.py
    • Zpráva jde normálně k LLM; SKILL.md (bez frontmatteru) se vloží jako [Active Skills — instructions for this user turn] RuntimeContextBlock
    • Nezávislé na command routeru (nezačíná /), funguje přes všechny kanály (Telegram ověřeno 2026-09-16)
    • CLI App aliases se resolvují taky (installed_skill_aliases())
  • /jmeno = command router. Jen builtins (/new, /stop, /model, /skill, /trigger, /pairing, … — seznam v nanobot/command/builtin.py, BUILTIN_COMMAND_SPECS). Custom skilly nelze registrovat jako slash command.
  • v0.3.0 vs v0.3.5 breaking change: v 0.3.0 is_dispatchable_command() neznámý /cokoli propustil k LLM (fallback interpretace). V 0.3.5 vrací True pro jakýkoliv text začínající / → router odmítne (Unknown command "/usage". Use "/help"...), zpráva nikdy nedosáhne LLM. Proto custom /usage přestalo fungovat po upgradu; $usage funguje dál.

Skill loading pořadí

  1. workspace (workspace/skills/) — highest priority
  2. Agent Plugin skills (workspace/plugins/)
  3. builtin (nanobot/skills/) — duplicity skipnuté dle jména

Disabled skilly se filtrují přes disabled_skills + aliases.

Progresivní loading

System prompt obsahuje jen summary (jméno + description + cesta) — build_skills_summary(). Plný obsah SKILL.md se načte až:

  • explicitně: $skill-name v turnu
  • agent sám: read_file na cestu ze summary

Sessions storage (v0.3.5)

  • JSONL soubory: <config-dir>/sessions/<workspace-id>/ (mimo workspace)
  • Migrace z <workspace>/sessions/ proběhne automaticky při prvním startu po upgradu (atomic copy, symlinks rejected)
  • Downgrade: nanobot sessions restore-workspace --config <config.json> --workspace <workspace>

Env vars (v0.3.5)

  • NANOBOT_LLM_TIMEOUT_S — zrušen (Unused)
  • NANOBOT_STREAM_IDLE_TIMEOUT_S — default 90 s, idle-based (renewed per stream event), max 3600; platí i pro interní tasky (Dream, heartbeat, title gen)
  • NANOBOT_MAX_CONCURRENT_REQUESTS — default unlimited, kladné int = cap
  • /health může vracet HTTP 503, když enabled WS channel neběží (Zabbix check! )