grove
Your own LLM wiki, as a plugin: a skill that teaches a model to ingest sources, answer with citations and keep the wiki healthy, on top of Leaf's tools, which read a curated Markdown wiki and change it only through validated, all-or-nothing batches. A change that breaks the wiki's conventions is rejected with a message that says what to fix, so even a small model cannot erode the wiki.
It follows Karpathy's LLM-wiki pattern (raw sources never change; the model compiles them into linked, cited
pages; index.md and log.md are kept for you) but replaces the "edit the files yourself" workflow of the
upstream skill with Leaf's editor.
What is in it
MCP server (leaf) | Leaf's tools, which document themselves (server instructions, tool descriptions, the batch format): read and search, and the editor |
Skill grove | the workflow (resume, answer, ingest, lint) and the rule that the wiki is only ever touched through the tools |
| Commands | /grove:init, /grove:ingest, /grove:query, /grove:lint |
The plugin runs Leaf's prebuilt binaries: a launcher (bin/run) downloads the release pinned in
release.env once, checks its sha256 against the pinned value, caches it, and runs it.
Install (Claude Code)
/plugin marketplace add AmozPay/grove
/plugin install grove@grove
The wiki is LEAF_WIKI (default ~/wiki); the cache is LEAF_DB. Create a wiki with
/grove:init, then /grove:ingest <file or URL>, then ask questions with /grove:query.
Write access is explicit. The plugin starts leaf-mcp-editor, the build that has the editor_*
tools. For a read-only server, change the args in hosts/claude-code/.claude-plugin/plugin.json to
["leaf-mcp"]. With it, /grove:ingest and /grove:init cannot change anything.
Hermes (and other Agent Plugins v1 hosts)
The repository root is also an Agent Plugins v1 package: plugin.json, skills/grove/
and mcp.json (the leaf server, run by ./bin/run leaf-mcp-editor). It is generated from the same
core/plugin.json as the Claude Code plugin, so both have the same name, version, description and server.
hermes plugins install AmozPay/grove --enable # packages install disabled without --enable; MCP servers connect next session
- Hermes starts Leaf's server with a filtered environment (
LEAF_WIKIis not passed), so the wiki is Leaf's default,~/wiki. To use another folder, declare your ownleafentry undermcp_servers:inconfig.yaml(a config entry replaces the package's) withenv: {LEAF_WIKI: ...}and the absolute path ofbin/run. The agent is still never told the folder. - The downloaded binaries are cached in the plugin's
PLUGIN_DATAdirectory. - Hermes has no slash commands for packages: the workflows are written into the skill. Creating a wiki is a
command, not a tool, so the init workflow asks the user to run
./bin/run leaf editor initthemselves. - Hermes's tools are named
mcp__leaf__guide,mcp__leaf__search, ... - Checked for real with Hermes's own loader and MCP client, in a temporary
HERMES_HOMEandHOME(so the default wiki was a temporary one): the package loads without diagnostics, the 12 tools register, andguideanswers. No model session was run with it.
Developing
core/ is the source of truth (skill, commands, launcher, release pin). hosts/ and
.claude-plugin/marketplace.json are generated and committed:
Enable the pre-commit hook once per clone; it runs the build and stages hosts/ and the marketplace:
git config core.hooksPath .githooks
scripts/build.py # regenerate
tests/run.sh # launcher, generated files, structure
LEAF_BIN_DIR=/folder/with/the/binaries tests/run.sh # also checks the skill against the real tools
scripts/pin-release.sh <BASE_URL> <folder with leaf-<version>-<target>.tar.gz> # pin a release
The tests that use the real binaries check that every tool the skill names exists, that the server documents its own use (instructions, descriptions, the batch format), and that the guide works without revealing where the wiki is. The skill itself must not name the wiki's folder (a test checks), and holds the workflow only: Leaf's tools carry their own documentation.
Status and limits
Checked for real (Claude Code 2.1.300, a temporary wiki, never a real one):
- The plugin loads (
--plugin-dir), the launcher starts the editor server, and the tools are namedmcp__plugin_grove_leaf__*, as expected. /grove:querywithRead,Grep,GlobandBashall allowed (and the wiki in the working directory) used onlyguide,searchandcite.- The launcher downloads, hash-checks and runs the real packaged archive (a local
file://release).
Not verified, or known limits:
- Pinned to Leaf v0.1.0 (Linux and macOS, x86_64 and aarch64): the launcher downloads the archive for your
platform from the GitHub release once and refuses it unless its sha256 matches
core/release.env. CI checks this download on every push. The macOS archives were built by CI but never run by me. - Linux and macOS only (the launcher is POSIX shell).
- No license is set: that is for the owner to choose.