Agent skills
Nottario ships a small bundle of markdown files that teach an AI agent how to work inside a Nottario project: how to identify itself, how to find the next task, how to record progress, what each domain (tasks, cycles, docs, architecture) means. The bundle is the same content a human contributor would read in this documentation — but written in the imperative voice agents respond to, and addressable by a single MCP tool.
The files in this section are mirrored straight from
internal/skill/files/ in the source tree at every deploy. What
you read here is exactly what the latest container ships to agents.
Drift between the docs and the bundle is impossible: the build job
copies the markdown from disk every time the site is rebuilt.
How an agent installs the bundle
There is one tool: nottario.skill.install. It returns a small
JSON descriptor — a short-lived signed URL for the bundle as a single
zip, plus an install plan. The bundle content itself never flows
through the MCP response; the agent reads ~200 tokens of metadata
and the bytes travel server → disk directly.
Response shape:
{
"download_url": "https://<host>/skill.zip?exp=…&sig=…",
"format": "zip",
"bundle_version": "sha256:…",
"install": {
"name": "nottario",
"manifest": "SHA256SUMS",
"preferred_dir": "<workspace>/.claude/skills/nottario",
"fallback_dir": "~/.claude/skills/nottario",
"instructions": "Fetch the URL with any HTTP tool, unzip into preferred_dir, restart the client."
}
}
The signed URL is valid for five minutes and needs no
Authorization header. The agent picks whatever HTTP tool the host
exposes (curl, wget, PowerShell's Invoke-WebRequest, Python's
urllib, Node's fetch, …), saves the zip, then extracts it into the
client's skill directory. Pre-loaded installs are the only mode —
the bundle lives on disk because most agent hosts (Claude Code and
similar clients) load skills at session start.
Workspace path is preferred (<repo>/.claude/skills/nottario/ —
scoped to one repo and committed alongside the code so every
contributor gets it); the home path (~/.claude/skills/nottario/)
is the fallback when you work on Nottario across unrelated checkouts
or do not want to version the bundle.
How you find out there is a new bundle. You do not have to poll.
When you connect, the server's instructions name the current bundle
version and repeat the check below; nottario.whoami returns the same
value as skill_bundle_version. If it differs from your installed
SHA256SUMS, reinstall and tell the human to restart the client. The
server says this rather than the bundle because an outdated bundle
cannot know it is outdated.
Check before downloading. bundle_version is sha256: followed
by the SHA-256 of the SHA256SUMS file that ships inside the zip. It
is not a hash of the zip, of skill.md, or of any other single
file. To know whether you are up to date, hash that one file where the
bundle is installed:
echo "sha256:$(sha256sum "$DIR/SHA256SUMS" | cut -d' ' -f1)" # Linux
echo "sha256:$(shasum -a 256 "$DIR/SHA256SUMS" | cut -d' ' -f1)" # macOS
"sha256:" + (Get-FileHash "$DIR\SHA256SUMS" -Algorithm SHA256).Hash.ToLower()
Equal to bundle_version: stop, there is nothing to download and no
restart to ask for. Different, or SHA256SUMS missing (a first
install, or a bundle from before the manifest existed): install.
SHA256SUMS lists every other file as <sha256> <path>, the format
sha256sum -c reads, so (cd "$DIR" && sha256sum -c SHA256SUMS)
verifies an install and reveals files edited by hand. Files in the
directory that it does not list are leftovers of an older bundle.
The session has to be restarted after a sync — most agent hosts read the skill bundle once at session start and do not re-scan. The agent should remind the human of this explicitly when it finishes the install, naming the host application if it knows which one it is.
Anatomy of a skill
Every file starts with a tiny YAML front-matter block declaring
its name and description. The description is what a model sees
when it decides whether the skill is relevant — keep it specific
about WHEN to invoke, not just WHAT the skill covers.
---
name: nottario-domain-tasks
description: Complete reference for the Nottario tasks domain: schema, semantics, every tool, edge cases.
---
# Tasks domain — full reference
…
The body is plain markdown — same conventions as the rest of this site. Code blocks for tool invocations, tables for schemas, imperative sentences ("always", "never", "before X, do Y") for operating rules.
Overrides
Each Nottario instance can extend or tighten the bundle without
rebuilding the binary: an admin writes a document with scope=global,
kind=skill, path=global/skills/<file>. That override is included
in the next skill.install snapshot transparently — overrides change
bundle_version, so the next sync picks them up.
Overrides can only be written by an admin signed in to the web app. API tokens — including an admin's — are refused for any global document, because an override changes the instructions of agents on every project while a token is scoped to a single one.
Use this to add bundle-absent files (by-language/go.md,
by-role/security.md, recipes/deploying-to-our-k8s.md).
The bundle
The pages listed in the Skills section of the side nav are the exact files that ship with Nottario. Start with the overview and read deeper into a domain as the task at hand requires.