Eru.Tool 0.9.0

There is a newer version of this package available.
See the version list below for details.
dotnet tool install --global Eru.Tool --version 0.9.0
                    
This package contains a .NET tool you can call from the shell/command line.
dotnet new tool-manifest
                    
if you are setting up this repo
dotnet tool install --local Eru.Tool --version 0.9.0
                    
This package contains a .NET tool you can call from the shell/command line.
#tool dotnet:?package=Eru.Tool&version=0.9.0
                    
nuke :add-package Eru.Tool --version 0.9.0
                    

eru

eru is a CLI tool for sharing knowledge files between projects. Declare where your shared files live (a git repo), pull them in with a single command, and track everything in a lock file so they stay in sync.

  • Manifests — knowledge-source repos publish .eru/manifest.json to declare available files; consumers pull from it automatically
  • Collections — group related files into a named set and pull them all with one command
  • Tag-based pulls — --tag devops fetches everything tagged devops across all collections
  • Glob patterns — collection entries can use globs to pull multiple files in one reference (e.g. docs/*.md)
  • Lock file (.eru/eru.lock) records every pulled file: its origin, path, and content hash
  • Static site — eru site generate builds a self-contained HTML site for browsing and searching the local knowledge cache; eru site serve adds live reload and a search API
  • Dry-run mode on every write command
  • Global config (~/.config/eru/config.json) for sources and collections shared across all your repos

Requirements

Install

Install the Eru.Tool tool:

dotnet tool install --global Eru.Tool

Leave off --global to install locally in a repo instead.

Install the skill with skills.sh:

npx skills add dburriss/eru

The skill tells agents how to use the CLI.

Quick start

1. Initialise your repo

eru init

Creates .eru/config.json in the current directory.

2. Pull a file

Paste a GitHub or GitLab file URL directly:

eru add https://github.com/my-org/knowledge/blob/main/docs/adr-template.md

eru registers the source automatically, downloads the file, and records it in .eru/eru.lock.

Or pull by source name and path once a source is configured:

eru add knowledge:docs/adr-template.md

Or pull an entire curated collection:

eru add --collection onboarding-docs

3. Keep files up to date

eru sync

Fetches every file in .eru/eru.lock, compares content hashes, and overwrites anything that has drifted.


Commands

Command What it does
eru init Scaffold .eru/config.json in the current directory
eru init --global Create the global config at ~/.config/eru/config.json
eru add <path> Pull a file by source:path, bare filename, or full URL
eru add --collection <name> Pull all files in a named collection
eru add --tag <tag> Pull all files matching a tag
eru add --dryrun <path> Preview what would be pulled
eru search <terms> Search sources and the lock file
eru sync Re-fetch all tracked files and update drifted ones
eru sync --dryrun Preview what sync would change
eru source add <url> Register a git repo as a knowledge source
eru source list List configured knowledge sources
eru source view <name> Show details and files for a source
eru collection create <name> Create a new collection
eru collection add <name> -f <source:path> Add a file reference to a collection
eru manifest init Create .eru/manifest.json in a knowledge-source repo
eru manifest add <path> Add a file/glob entry to the manifest
eru manifest remove <path> Remove an entry from the manifest
eru manifest validate Check all manifest entries resolve to local files (alias: verify)
eru site generate [-o <dir>] Generate a static HTML site for browsing the local knowledge cache
eru site serve [-p <port>] Serve the site locally with live reload and a search API
eru okf validate <path> Check a directory tree for OKF §11 conformance
eru okf init <path> Create missing OKF index.md files
eru okf fix <path> Repair a directory tree so it passes OKF validation
eru mcp Start an MCP stdio server for AI agent use

For full argument details see docs/reference/cli.md.

Static site

eru site generate builds a self-contained HTML site from the local knowledge cache — browse and search all source files offline.

eru site serve does the same but also starts a local HTTP server with a live-reload SSE feed and a /api/search endpoint. The browser reconnects and reloads automatically whenever the cache is synced. See docs/reference/site-generation.md and docs/how-to/customize-the-generated-site.md.

MCP server

eru mcp exposes knowledge search and retrieval to AI agents (Claude, Copilot, Cursor, etc.) over the Model Context Protocol. See docs/how-to/set-up-the-mcp-server.md.

Documentation

Full documentation lives under docs/, organised by Diataxis: tutorials, how-to guides, reference, and explanation.

Product Compatible and additional computed target framework versions.
.NET net10.0 is compatible.  net10.0-android was computed.  net10.0-browser was computed.  net10.0-ios was computed.  net10.0-maccatalyst was computed.  net10.0-macos was computed.  net10.0-tvos was computed.  net10.0-windows was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

This package has no dependencies.

Version Downloads Last Updated
0.16.1 70 11/7/2026
0.16.0 67 11/7/2026
0.15.1 67 11/5/2026
0.15.0 60 11/5/2026
0.14.0 116 11/2/2026
0.13.1 142 10/12/2026
0.13.0 123 10/12/2026
0.12.0 130 10/9/2026
0.11.1 123 10/8/2026
0.11.0 124 10/8/2026
0.10.0 130 10/5/2026
0.9.1 145 10/2/2026
0.9.0 136 10/2/2026
0.7.1 350 5/29/2026
0.7.0 273 5/29/2026
0.6.0 269 5/29/2026
0.5.1 266 5/29/2026
0.5.0 262 5/29/2026
0.4.0 264 5/29/2026
0.3.0 264 5/28/2026
Loading failed

`eru source add --scan` detects OKF bundles (any `index.md` with `okf_version`; a root marker covers nested ones) and falls back to the `knowledge/` convention. **Breaking:** without `--scan`, `eru source add` no longer auto-detects the `knowledge/` bundle; register bundles with `eru source bundle add`
OKF bundle discovery (and so `eru site generate`) now indexes only concept files that have a non-empty `type` frontmatter; untyped markdown is skipped
`eru okf verify <file>` records a `{ by, at }` confirmation in a concept file's `verified` list (`--by` defaults to `human:<git user.email>`, `--at` to now); `eru okf fix` now strips a malformed `verified` (placeholders like `unknown`/`false`, entries missing `by`/`at`), keeping valid entries; `eru okf validate` warns on placeholder `verified` values and `by: unknown`, pointing at `fix` and `verify`
OKF v0.2 alignment: `eru okf init`/`fix` write `okf_version: "0.2"`; `eru okf validate` reports non-fatal v0.2 shape warnings (`generated`, `verified`, `stale_after`, `status`, `sources`, legacy `timestamp`, `log.md` order); eru reads `sources` and falls back to a legacy `timestamp` when `generated` is absent; the ingestor agent template now writes spec-shaped `generated`/`sources` and omits `verified` until a human reviews; `eru inbox send` quotes `resource` in its frontmatter
`eru okf init <path>` creates missing `index.md` files (root with `okf_version`, plus a catalog table per folder), never overwriting; `eru okf fix <path>` repairs a tree so `eru okf validate` passes (index frontmatter, missing concept frontmatter/`type`, non-ISO `log.md` date headings, missing indexes). Both write by default; `--dry-run` previews, `--default-type` sets the type for untyped concepts
`eru source bundle add` warns when a bundle is auto-detected as `manifest` but has no `.eru/manifest.json`, listing the ways to fix it (add `okf_version` to `index.md`, pass `--kind okf`, or create a manifest); `eru source add` does the same for a detected `KNOWLEDGE/` bundle
`eru okf validate`: the bundle-root `index.md` frontmatter message now explains that it should contain only `okf_version`, which is what makes eru detect an OKF bundle
`README.md` and dot-directories (`.github`, `.claude`, `.agents`, …) are no longer treated as OKF concepts: they are skipped by `eru okf validate` and OKF bundle discovery
`siteIgnorePatterns` now defaults to `index.md`, `log.md` and `README.md` (configs with an explicit value are unchanged)
`okfIgnorePatterns` setting (default `apm_modules/**`, `inbox/**`, `node_modules/**`) to skip paths during OKF bundle discovery and `eru okf validate`
`eru version` command prints the version and the git commit it was built from
Added description field to the manifest
Remote git inboxes: `eru inbox add <name> <git-url> [--branch]` registers a repo as an inbox and `eru inbox send` clones it shallowly, commits the item and pushes (via FsForge); remote inboxes are send-only
Added `eru site serve` command to serve the generated static site locally with live reload on changes to the cache
`eru okf validate <path>` command to check a directory tree for OKF §11 conformance (parseable frontmatter with a non-empty `type`, valid `index.md`/`log.md` structure); never flags unknown types, unknown extra keys, broken cross-links, or missing optional fields
Generated site now surfaces OKF frontmatter: a trust-tier badge per file (`unverified`/`machine-confirmed`/`human-reviewed`, derived from `verified[].by`) and a new "Types" filter/browse page alongside the existing Sources and Tags
Added `SiteIgnorePattern` with default values of "index.md" and "log.md" to ignore OKF structure files when generating site pages
OKF bundle discovery on sources
`eru inbox` commands for handling inboxes/channels and sending to inboxes
`eru inbox process` command to run pending inbox items through their channel's configured ACP agent, archiving processed items; supports `--inbox`, `--channel`, `--item`, `--all`, `--dryrun`, and `--output`; `--debug` also reports per-item agent handshake timings (initialize/session-new/prompt)
`eru inbox watch` command to watch an inbox's raw directory and automatically run `inbox process` on new items, debounced and also polled on a configurable interval (`--interval`, default from config); supports `--dryrun` and `--debug`
`--agent-timeout` option on `eru inbox channel add` to bound how long an ACP agent call may run; the timeout is a liveness check (reset on any agent activity) rather than a fixed deadline
ACP agent output is streamed as it arrives instead of only being shown once the call completes
`eru inbox process` now falls back further when a channel has no `--agent-instructions` configured and `<inbox>/.agents/agents/ingestor.md` doesn't exist: it checks a tool-specific convention path derived from `--agent-command` (e.g. `.claude/agents/ingestor.md` for `claude`), and finally falls back to eru's own built-in curation instructions — so a channel's agent always receives some curation instructions
`--append <text|@file>` (repeatable) on `eru inbox process` and `eru inbox watch` adds text to the agent prompt after the resolved instructions and before the item; a leading `@` reads a file, `@@` is a literal `@`
Built-in ingestor instructions (`agents/ingestor.agent.md`) now produce a valid OKF bundle: folder `index.md` files get no frontmatter, the root `index.md` carries only `okf_version`, `README.md` is treated as outside the bundle, and the agent uses `eru okf init` for new folders and `eru okf validate`/`fix` as a final self-check
Built-in ingestor instructions (`agents/ingestor.agent.md`) no longer loop until `inbox/raw/` is empty; the agent processes only the items it is told to (by `eru`, a harness prompt, or a workflow) and asks if none are specified
Built-in ingestor instructions (`agents/ingestor.agent.md`) no longer include a commit step, so they stay neutral across environments; use `--append` to add commit/PR behaviour
`eru manifest verify` renamed to `eru manifest validate`; `verify` is kept as a backward-compatible alias
`eru add` gives a clearer error when passed a bare repo URL, suggesting `eru source add <url>` followed by `eru add <source>:<path>`
Unhandled exceptions now print a concise `eru: unexpected error: <message>` instead of a raw stack trace; pass `--debug` to see the full stack trace
OKF bundle discovery no longer fails when a source has no branch configured
Pinned the test runner via `global.json` (`Microsoft.Testing.Platform`) to fix `dotnet test` discovery