Browse docsKnowledge

Knowledge

Build a knowledge base through conversation with Enso, then browse it in the read-only web viewer. The source of truth is ordinary Markdown on your machine: portable files you can keep, back up, and use with other tools. You do not need to write them yourself.

Use Memory for dated requests, decisions, and reported outcomes from past conversations. Knowledge holds maintained reference; Memory stores episodes in the database, with links to their original exchanges.

Availability

This guide describes the knowledge implementation in Enso’s beta source. The shared knowledge browser, enso knowledge commands, and enso-knowledge skill are not included in v0.1.2, the latest published release checked on September 15, 2026. Existing releases already have workspace knowledge/ directories and basic file browsing.

Run enso knowledge --help to check whether your installation includes this feature. If the command is unknown, use a release that includes it when available or an intentionally installed development build. A normal managed update installs published releases; it does not install unreleased development work.

Start with a conversation

Ask for the knowledge you want to keep:

Save what we learned about choosing a home router in shared knowledge. Link it to the existing home network page and keep the sources beside the claims.

For material that belongs to one workspace:

Keep the deployment checklist in the website workspace’s knowledge. Update the existing page, and link to our shared domain reference instead of copying it.

Enso loads the bundled enso-knowledge skill, finds the relevant pages, and maintains their files and metadata. A useful page has one home; other pages link to it. Detailed facts belong in knowledge, while brief rules about when to consult them belong in AGENTS.md. See instructions and skills.

Open Knowledge in the web viewer, or visit /knowledge at your viewer’s address. Choose General, a workspace, or All knowledge:

  • Folders shows immediate subfolders and pages together. Follow the breadcrumbs to move back up; the reader also shows other pages in the same folder.
  • Search looks through filenames and contents in the selected folder and everything below it. Choose All knowledge to broaden the search across roots.
  • All notes gives a flat list; Recent shows recently updated files. Lists are paginated, so a collection with thousands of pages does not expand into one huge tree.
  • Open a page to follow its links, see Linked from backlinks, or inspect View source.

The viewer has no editor. Continue the conversation to change a page, and reload the viewer to see saved changes. Browser back, forward, and opening links in another tab work normally. Keep remote access behind a private connection.

Shared and workspace knowledge

The default layout is:

~/.enso/
├── knowledge/                       # General: useful across workspaces
│   ├── Home network.md
│   └── Reference/
│       ├── Domains.md
│       └── Networking/
│           └── Choosing a router.md
└── workspaces/
    └── website/
        └── knowledge/               # Context owned by this workspace
            └── Deployment.md

Use your ENSO_HOME in place of ~/.enso if you configured another home.

Location Put here CLI scope
$ENSO_HOME/knowledge/ Shared reference, personal knowledge, and facts used across workspaces general
$ENSO_HOME/workspaces/<name>/knowledge/ Reference whose context belongs to one workspace workspace:<name>

Enso discovers existing workspace knowledge directories automatically, without a second registration or a viewer restart. Setup and managed upgrades that include this feature create a missing shared directory. enso workspace audit --fix can also create it; existing contents are preserved.

Folders can contain both pages and more folders. Keep them when they help explain the subject: Reference/Networking/ supplies context that a flat filename cannot. A flat collection works too. Start with the structure you already understand and reorganize when there is a concrete benefit.

Folders help an agent choose what to read; they do not automatically load every page or restrict file access. Workspace permissions apply separately. Keep attachments beside their related pages, and use links across roots instead of maintaining several copies of the same reference.

Use familiar wiki links or ordinary Markdown links:

[[Home network]]
[[Reference/Domains|Domain reference]]
[[Deployment#Before you start]]
[Deployment checklist](../Deployment.md#before-you-start)
[[general:Reference/Domains|Shared domains]]
[[workspace:website:Deployment|Website deployment]]

The text after | is a display label. It does not add an alias or another metadata field to the target page. A bare wiki name must be unique in its root; Enso does not search other workspaces to guess its meaning.

Wiki paths are checked relative to the source folder and the knowledge root. If neither matches, a unique trailing path can resolve too: [[Networking/Choosing a router]] can find Reference/Networking/Choosing a router.md. Multiple matches stay visibly ambiguous. Use general: or workspace:<name>: with the full root-relative path to choose a target explicitly. Ordinary Markdown paths are relative to the page containing the link.

Heading links open the corresponding section. Missing targets and headings are flagged; Enso does not silently send you to another page. Each managed page has a unique ID, so its viewer URL survives a rename. Ask Enso to move it with enso knowledge move to repair file links as well: the move rewrites only the links it would otherwise break, and leaves links that still reach the same page exactly as written. It stops and explains itself when an incoming link to the page is ambiguous, or when a page it must repair has invalid metadata. Fix that first: give the ambiguous link an explicit general: or workspace:<name>: target, or run enso knowledge adopt on the page whose metadata is invalid. A direct filesystem rename keeps the ID but does not repair those paths.

Local images can use ![Network diagram](diagram.png) or ![[diagram.png]]. PNG, JPEG, GIF, WebP, and AVIF files display in the page; every other local attachment, including SVG, becomes a download link. A note embed such as ![[Home network]] becomes a link to that page rather than inserting its entire contents. External web and email links remain external; remote images are not loaded automatically.

The reader accepts .md pages up to 2 MiB and serves attachments up to 20 MiB. Hidden files, symbolic links, node_modules, __pycache__, and files outside the knowledge roots are excluded. Raw HTML is escaped; the reader does not execute a page’s scripts or user-defined formatting tools.

Minimal metadata

Enso keeps a small YAML block, called frontmatter, at the start of every managed page:

---
schema: enso.note/v1
id: 3d6d560a-21ef-49fa-a4db-7640b8dcab89
created: "2026-09-15T12:00:00Z"
updated: "2026-09-15T12:00:00Z"
---

## Before you start

The checklist goes here.
Field Required? Meaning
schema Yes Exactly enso.note/v1, identifying this format
id Yes A unique UUID that identifies the page through moves and renames
created Added to new pages; optional on imports When the page was created
updated Added to new pages and substantive edits; optional on imports When its content last changed

Enso writes timestamps in UTC with a timezone. An imported file’s modification time does not prove its original creation or content-update date, so unknown dates stay absent. A move updates updated when it repairs the page’s links; a move with no body change leaves that time alone.

These four fields are the whole metadata contract. Titles come from filenames. There are no type, tags, or custom metadata fields in this version. Put publication dates, sources, people, and other useful context in the body near the relevant information. Enso creates IDs for you; never reuse the example ID or copy a template’s ID into a new page.

Consistent formatting

The bundled skill supplies one writing style for General and every workspace:

File under $ENSO_HOME/skills/enso-knowledge/ Purpose
SKILL.md Where knowledge goes and how the agent reads, writes, links, and checks it
references/formatting.md The common writing and formatting rules
scripts/lint.py A read-only checker for the mechanical style rules

Ask Enso to change the rules and checker together when you want a different style:

Use the filename as the title, start sections with ##, and use #### for subsections. Apply that style to shared and workspace knowledge.

That is a personal preference, not a fixed Enso requirement. The shipped checker checks line endings, final newlines, trailing whitespace, repeated blank lines, and spacing around headings. It leaves code and frontmatter alone and does not enforce H1 headings, a heading hierarchy, or a maximum line length.

User edits to the skill and its support files are preserved by managed upgrades. Change a convention because you want it changed, not just to silence a failed check. Core metadata, IDs, link validity, and file-access rules remain fixed in Enso and cannot be weakened by editing the style checker.

To check saved work with the default home:

enso knowledge audit --scope general
python3 ~/.enso/skills/enso-knowledge/scripts/lint.py ~/.enso/knowledge

Without --scope, the core audit checks all discovered roots. Run the style checker on the changed files or directories; it also accepts several paths. Both checks report problems without editing pages. Resolve uncertain links from their source context rather than inventing a destination to make the report clean.

Import an existing collection

An existing Markdown vault can keep its folders, pages, and attachments. Ask Enso to import a copy first, inspect the result, and then agree on any restructuring.

From an Enso source checkout that includes this feature:

uv run python scripts/import-knowledge.py /path/to/markdown-collection \
  ~/.enso/knowledge --receipt ~/enso-import-receipt.json

The destination must be absent or empty. The importer copies visible regular files, preserves nested folders and attachments, and skips hidden entries and symbolic links. It stages the copy before publishing it and leaves the original collection untouched. The receipt path must be outside both roots and must not already exist; keep it for the file hashes and skipped-entry list.

The script adds core metadata without inventing dates or rewriting prose and filenames. Unfamiliar or invalid frontmatter is kept in a fenced Imported metadata section. If the frontmatter has no closing delimiter, the entire original file is retained in a fenced Imported document section for review. Templates remain reference pages: create each new page with its own metadata and use only the template’s body structure.

Existing pages without valid metadata remain readable by path. To adopt one already inside a knowledge root:

enso knowledge adopt "Reference/Domains.md" --scope general
enso knowledge audit

Review imported links and run your style checker. Folders, ambiguous links, unsupported plugin syntax, and formatting preferences may need a separate, deliberate cleanup. The importer does not reproduce an editor’s plugins, graph view, or embedded-note rendering.

When Enso becomes your source of truth, update the old locations in its home/workspace instructions, installed skills, scheduled jobs, backup scripts, and stored file paths. The importer copies knowledge files; it does not redirect those automations for you. Choose which original files to retain and how to back up the new roots before retiring another writing workflow.

CLI and reliable writes

Most people can leave these details to Enso. The CLI reference lists the commands for scripts and direct use:

enso knowledge roots
enso knowledge list --scope general --folder Reference
enso knowledge search "domain renewal" --scope general --folder Reference
enso knowledge show "Reference/Domains.md" --scope general --json
enso knowledge move "Home network.md" "Reference/Networking/Home network.md" --scope general

list and search return up to 50 notes per page; --limit allows 1 to 500, and --offset skips earlier results. show --json returns the content and its sha256 revision. update requires that hash with --expected-hash, so an edit based on an older copy is refused. create and update take a file containing the Markdown body, or - for standard input; Enso manages the frontmatter. New destinations are never overwritten. adopt and move can also take an expected hash, and move --to-scope sends a page to another root.

Moves preserve original files for recovery while repairing links. If a move is interrupted, keep any .knowledge-move-* recovery directory in the Enso home and ask Enso to inspect its manifest and current file hashes before finishing or reversing it. Several linked files cannot all change in one filesystem operation; avoid editing those files with another tool during a move. Keep regular backups of shared and workspace knowledge.