Make a Basic Memory project ready for OKF v0.2 export by finding and fixing what blocks it. Use when preparing a project for OKF export, publishing, or handoff, or checking an OKF bundle.
86%
Does it follow best practices?
Run evals on this skill
Adds up to 20 points to the overall score
Passed
No findings from the security scan
OKF v0.2 is a directory format for knowledge: Markdown concept files with YAML
frontmatter, an index.md per folder, and a root log.md. A Basic Memory
project is most of the way there already. The wiki projection writes the
index.md and log.md pages, and the export turns wikilinks into the standard
Markdown links OKF needs.
This skill makes a project ready for that export. It uses the note tools, so it
works in Basic Memory Cloud and locally. In Cloud the export itself runs as a
Cloud task; locally it is bm okf export.
Keep the project's wikilinks. They are how Basic Memory links notes, and the export converts them.
If the project is unknown, discover it with bm_project(command="list").
Pass a nonempty project on every note, folder, context and schema call, even
with one project or a qualified memory:// URL. Use the chosen project's name,
workspace/project, or external ID; <project> below is a placeholder for it.
Recent activity also requires project. Search accepts project for one
project, projects for selected projects, or all_projects=True explicitly.
Discovery and bundled manuals need no project. Keep the same scope when following
returned paths, paginating, or recovering from a refusal.
bm CLI)# Note files must end in lowercase .md
bm_find(name="*.markdown", project="<project>")
bm_find(name="*.MD", project="<project>")
# index.md and log.md belong to the wiki. A file there with note_type
# "Index" or "Log" is a wiki page; anything else is a note of your own.
bm_find(name="index.md", project="<project>")
bm_find(name="log.md", project="<project>")
# Export records relation types under `bm.okf_export`, so a note may not use it
bm_search(filters={"bm.okf_export": {"$exists": True}}, project="<project>")Page through each bm_find until has_more is false.
| Blocker | Fix |
|---|---|
A note ends in .markdown or .MD | bm_move to the same path ending in .md |
A note of your own named index.md or log.md | bm_move to a name that says what it is, e.g. notes/overview.md |
A note uses bm.okf_export, or bm is not a mapping | Rewrite its frontmatter without that key (below) |
bm_move(identifier="notes/long-form.markdown", destination="notes/long-form.md", project="<project>")
bm_move(identifier="notes/index.md", destination="notes/overview.md", project="<project>")bm_move keeps links to the note working. To rewrite frontmatter, read the
note as JSON and overwrite only that revision:
note = bm_read(identifier="notes/clash", output_format="json", project="<project>")
bm_write(
identifier=note["file_path"],
title=note["title"],
content="<the note body, unchanged>",
metadata={...}, # the frontmatter without bm.okf_export
overwrite=True,
expected_checksum=note["checksum"],
project="<project>",
)Never edit a wiki index.md or log.md by hand. The projector rewrites them.
List what you renamed or rewrote, and anything you left for the user to decide.
Say the project is ready for export, and that the export runs as a Cloud task
(or with bm okf export locally).
Notes without frontmatter are fine: Basic Memory adds title and type when
it indexes them. Broken links are allowed; the export keeps them as broken
links. Fix the ones a reader will follow (see memory-curate).
With the bm CLI and a local project, you can run the export and check it:
bm wiki status --project research # current, stale, or conflicted
bm wiki rebuild --project research # refresh index.md and log.md
bm okf export ~/exports/research --project research --json
bm okf check ~/exports/research --jsonbm wiki status reports a hand-written index.md or log.md as
conflicted; rename it as in step 2.--json output lists diagnostics,
each with rule and message. It refuses an existing destination unless
--replace is given; ask before replacing a bundle someone relies on.bm okf check exits 0 for a valid bundle and 1 for violations. It is
structural: it accepts broken cross-links, so a passing check does not mean
every link resolves.bm okf check on a bundle, not on the project. The project's wiki pages
use wikilinks and frontmatter on purpose, and the check reports them.type defaulting to note and tags to an empty listbm.okf_export frontmatter extension[category] content, with their tags and
temporal qualifierslog.md, under dated headingsbm_move for renames, so links follow the note.basicmachines-co/basic-memory
eddb4c0
If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.