Skip to main content

almanac

almanac curates agent skills. A skill is a directory that contains a SKILL.md file. The file holds YAML frontmatter with a name and a one-line description, then a body of instructions. almanac list shows the available skills. almanac show <name> prints the full content of one skill. An agent sees what it can do without reading every SKILL.md first.

Install

The package is lmnc, because almanac was taken on every registry. The command is almanac, and both names install together.

cargo install --locked lmnc
brew install cjohnhanson/tap/almanac
uv tool install lmnc
npm install -g lmnc

cargo install builds from source. It needs Rust 1.88 and a C compiler. The other three carry a prebuilt binary for macOS and Linux, x86-64 and arm64, published by a tagged release.

To build the unreleased main branch:

cargo install --locked --git https://github.com/cjohnhanson/almanac

Or run it without installing:

uvx lmnc list
npx lmnc list

A release also carries prebuilt archives and a .deb, on the releases page. Each archive holds the binary and the man page. Install a .deb with dpkg -i: it is a file, not a repository, so apt-get install does not reach it.

Check the install with almanac --version.

Usage

almanac list                  # every skill, with descriptions
almanac show <name>           # the full SKILL.md content
almanac index                 # a JSON index for machines
almanac docs [topic]          # the bundled documentation

How it works

almanac.yml governs one library directory. Almanac pins every entry to a commit and a content hash, and stamps every vendored directory as managed. add trusts a source on first use: it runs a mechanical red-flag scan, and it needs an explicit --accept. update shows the upstream diff and a fresh scan before it re-pins, and sync --check fails when a pinned entry drifts.

library: skills
skills:
- name: gaff
  source: github:cjohnhanson/gaff
  path: skills/gaff
  ref: main
  rev: 849b76e2…full sha…
  sha256: sha256-v1:…

The index is small enough to inject into agent context. list prints one line per skill. show loads the instructions for one skill on demand. index --md --max-bytes 4096 prints a markdown skills index that fits a byte budget. prime prints what almanac is and how to use it, for an agent's context; it depends only on the binary version.

Sources

  • github:owner/repo (or bare owner/repo): pinned by commit and hash.
  • git:<url>: any git server over https, git://, or a local path. Almanac tries a sha fetch, then the recorded ref, then a full fetch, all in-process on gix. No git program runs. An ssh URL is refused, because gix would spawn ssh for it.
  • dev:<path>: a local snapshot of a skill you develop alongside. sync --check skips it and reports drift as information.

Composed libraries

A library can draw on other libraries. Declare them in stores.yml, each under a local alias:

format: 2
stores:
  - alias: shared
    path: ../team-skills
  - alias: upstream
    git: https://example.com/org/skills

A skill name is the identity, and two libraries can hold the same name. The nearer library wins: this library first, then each declared library in declaration order. list, show, and index all give the winner, so the list shows what an agent loads.

A skill that loses a name stays on disk. almanac check reports every shadowed name and the library it came from.

A skill declares the skills it needs:

---
name: reviewing
description: My review process.
requires:
  - shared:testing
  - writing
---

An entry with no alias names a skill in the same library. almanac check reports an entry that names no skill, and an entry that uses an alias the library does not declare.

almanac store list shows the libraries and their skill counts. almanac store sync fetches the remote ones into a local cache. Four commands reach the network: add, update, sync, and store sync. Every other command reads what is already vendored or cached, so an answer never changes because of a fetch nobody asked for.

Serving a library

almanac serve                          # stdin and stdout, for a child process
almanac serve --bind 127.0.0.1:8931    # for clients that connect

The server offers the skills extension, readable resources, and tools. A client cannot be asked which it understands, so the surfaces are configuration: --surfaces skills,resources,tools. The default is skills,tools, because every client can call a tool. A served library is read-only, and no flag changes that: curating a skill is a decision a person makes at the command line. It also has no authentication, so bind it to 127.0.0.1 or put an authenticating proxy in front.

Read almanac docs composition for the model.

Documentation

Related

Tools that keep their data as plaintext in the repository, where an agent can read it:

  • tisket: an issue tracker. Markdown issues with YAML frontmatter, in the repository
  • zettel: zettelkasten notes for a repository
  • gaff: a context-lifecycle handler for coding agents
  • missouri: end-to-end tests as directed graphs of filesystem states
  • mdstore: the frontmattered markdown library almanac indexes skills with

License

MIT.

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

lmnc-0.2.3.tar.gz (96.0 kB view details)

Uploaded Source

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

lmnc-0.2.3-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.musllinux_1_1_x86_64.whl (8.1 MB view details)

Uploaded Python 3manylinux: glibc 2.17+ x86-64musllinux: musl 1.1+ x86-64

lmnc-0.2.3-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.musllinux_1_1_aarch64.whl (7.5 MB view details)

Uploaded Python 3manylinux: glibc 2.17+ ARM64musllinux: musl 1.1+ ARM64

lmnc-0.2.3-py3-none-macosx_11_0_arm64.whl (7.4 MB view details)

Uploaded Python 3macOS 11.0+ ARM64

lmnc-0.2.3-py3-none-macosx_10_12_x86_64.whl (7.7 MB view details)

Uploaded Python 3macOS 10.12+ x86-64

File details

Details for the file lmnc-0.2.3.tar.gz.

File metadata

  • Download URL: lmnc-0.2.3.tar.gz
  • Upload date:
  • Size: 96.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.12.13 {"installer":{"name":"uv","version":"0.12.13","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for lmnc-0.2.3.tar.gz
Algorithm Hash digest
SHA256 71ab7f8000e29a8feff07fbec760ec3419bb9ceb443bf0ba27bcb427817ea769
MD5 a0bfbf9e20d31787aa630cc943f350a9
BLAKE2b-256 ea83fadd7a7b8dfee47dc09700f9be70e1b6786475549138273127a896f37535

See more details on using hashes here.

File details

Details for the file lmnc-0.2.3-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.musllinux_1_1_x86_64.whl.

File metadata

  • Download URL: lmnc-0.2.3-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.musllinux_1_1_x86_64.whl
  • Upload date:
  • Size: 8.1 MB
  • Tags: Python 3, manylinux: glibc 2.17+ x86-64, musllinux: musl 1.1+ x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.12.13 {"installer":{"name":"uv","version":"0.12.13","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for lmnc-0.2.3-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.musllinux_1_1_x86_64.whl
Algorithm Hash digest
SHA256 5809517935f988b330cd4a262790fd3475e23902338ea1d4e79c09750e0c23db
MD5 3b95f409f9562acb62c3dad667698bfa
BLAKE2b-256 6abab635c705df5ae6c218bb70b9196289a7196641010ea785e1b392e732fc48

See more details on using hashes here.

File details

Details for the file lmnc-0.2.3-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.musllinux_1_1_aarch64.whl.

File metadata

  • Download URL: lmnc-0.2.3-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.musllinux_1_1_aarch64.whl
  • Upload date:
  • Size: 7.5 MB
  • Tags: Python 3, manylinux: glibc 2.17+ ARM64, musllinux: musl 1.1+ ARM64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.12.13 {"installer":{"name":"uv","version":"0.12.13","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for lmnc-0.2.3-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.musllinux_1_1_aarch64.whl
Algorithm Hash digest
SHA256 c0789c133c61f9b6c95b4bf43415d8e67c8987c4db65130c712f1ffce6ca943a
MD5 45c21e63eab8b9dffb9f0eadb01fce5d
BLAKE2b-256 878bff5cbb27e851f59381794e356c9b4e7b6a98726ae2a52b4f05ab24127c93

See more details on using hashes here.

File details

Details for the file lmnc-0.2.3-py3-none-macosx_11_0_arm64.whl.

File metadata

  • Download URL: lmnc-0.2.3-py3-none-macosx_11_0_arm64.whl
  • Upload date:
  • Size: 7.4 MB
  • Tags: Python 3, macOS 11.0+ ARM64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.12.13 {"installer":{"name":"uv","version":"0.12.13","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for lmnc-0.2.3-py3-none-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 ba5ec5235d62ff8d56d912f34148e055a62537ab625cd09ede516e72ca1153da
MD5 3505759a65b20a5582ff58867e40adfa
BLAKE2b-256 76bd8f2bfe1ce90bdf65ba397bff2dac85b92b0a8c3faaa7443614f2e85b8475

See more details on using hashes here.

File details

Details for the file lmnc-0.2.3-py3-none-macosx_10_12_x86_64.whl.

File metadata

  • Download URL: lmnc-0.2.3-py3-none-macosx_10_12_x86_64.whl
  • Upload date:
  • Size: 7.7 MB
  • Tags: Python 3, macOS 10.12+ x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.12.13 {"installer":{"name":"uv","version":"0.12.13","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for lmnc-0.2.3-py3-none-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 5a5c302b094f6917da503d5ad00480e52d066a47dde3c12be5ab1aee9e6c520f
MD5 83e3934b962af14dfe9868b8ce02779a
BLAKE2b-256 cc1a6537c3ddd22f7561ca9ff948fc9ff0b5bcf0e85a2577d036bebc9bcf5652

See more details on using hashes here.

Release history Release notifications | RSS feed

0.2.5

5 files

0.2.4

5 files

This release

0.2.3 This release

5 files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page