Newer
Older
navi-1 / manuals / skills.md

skills — Manual

What it does

The catalog of skills and protocols this Navi has been taught: reusable methodologies, stored per user or shared by the hive. search finds entries; load returns one in full; create/update write a skill; propose offers a protocol to the user.

  • skill — knowledge about an approach: when it applies, heuristics, a private algorithm. Advice you follow as far as it fits.
  • protocol — a strict ordered procedure: mandatory steps, a check after each, preconditions and post-checks, and three explicit escape hatches. Following it is a commitment.

Search before improvising a recurring task — one call often replaces several turns of rediscovery. Write a skill once a way of working proved itself; never create a protocol directly — propose it and let the user decide.

Parameters

Parameter Required Description
op yes search \ load \ create \ update \ propose.
query for search Words matched against name, description, triggers and tags.
kind no skill \ protocol — filter, or disambiguate on load.
tag no Require this tag.
area no home \ infrastructure \ workflows \ general.
id for load/update Entry id from a search result.
name for load Exact name, when you have no id.
content for create/update/propose The whole document (front matter + body).
replaces_id for propose Id of an existing protocol this proposal replaces.

Actions

search

{"op": "search", "query": "энергосбережение", "area": "home"}
{"op": "search", "kind": "protocol", "tag": "power"}

Returns one line per entry: kind, name, version, area/visibility, description, tags, id. Personal entries come first.

load

{"op": "load", "id": "3f2a9c1d8e4b7a60"}
{"op": "load", "name": "Корректное выключение инфраструктуры", "kind": "protocol"}

For a skill, returns the instructions. For a protocol, returns the steps, the precondition list, the post-checks and the three escape hatches.

create

{"op": "create", "content": "---\nkind: skill\nname: Разбор логов\n---\n\nГрепай ERROR, сужай по времени."}

Saves a skill owned by the current user and returns its id and version. A protocol sent here is refused — use propose.

update

{"op": "update", "id": "3f2a9c1d8e4b7a60", "content": "<the full document>"}

Saves a new version of a skill you own (an admin may edit a shared one). The previous version stays in the history. A protocol sent here is refused: propose it with replaces_id instead.

propose

{"op": "propose", "content": "<protocol document>"}
{"op": "propose", "content": "<protocol document>", "replaces_id": "9c4d2b7a1e6f8035"}

Stores the protocol as a proposal — it is not in the catalog yet. The result carries a card with the whole document and two buttons, "Добавить" and "Отклонить"; the protocol becomes a catalog entry only when the user clicks "Добавить". Say what the protocol does and wait for the decision — do not run it on your own, and do not claim it is saved.

When a protocol is loaded

Read the escape hatches before step 1. They are part of the procedure, not commentary:

  • off plan (on_deviation) — what to do when reality differs from the plan;
  • cannot complete (on_blocked) — how to stop cleanly and report;
  • already done (on_already_done) — how to verify and skip a step whose result already exists.

Do not silently improvise around a step. A protocol exists because the user pre-agreed to the exact actions it names; deviating is an execution error to report, not a variation to choose.

Format (for the catalog editor, not the tool)

A document is a YAML front matter block plus a markdown body:

---
kind: protocol
name: Корректное выключение инфраструктуры
description: Останавливает сервисы в порядке зависимостей и проверяет, что диск не в работе.
area: infrastructure
tags: [power, shutdown]
triggers:
  - "пользователь просит выключить сервер"
  - "плановое отключение питания"
steps:
  - "Остановить сервисы приложений"
  - "Остановить базы данных"
  - "Синхронизировать и отмонтировать диски"
post_checks:
  - "systemctl list-units --state=running не содержит прикладных юнитов"
on_deviation: "Если шаг не удался — не продолжать, вернуться к предыдущему и доложить."
on_blocked: "Если сервис не останавливается за 60 с — остановить выключение и доложить."
on_already_done: "Проверить статус; если сервис уже остановлен — отметить шаг выполненным."
---

Дополнительный контекст, порядок зависимостей и известные ловушки.

steps, post_checks, on_deviation, on_blocked, on_already_done are mandatory for kind: protocol; a skill needs only name and a body.