OpenOv AI

What the workspace knows

A desk is one task and goes away with it. A conversation is shorter still. So an instance keeps one thing that outlives both, and it is a directory you can open: knowledge/, in the instance directory, one Markdown note per topic, written and edited by every session with the file tools it already has.

the note · index and validate · the common note · who writes here

A directory, not a thing behind a tool

A fresh instance has knowledge/ and nothing in it. It fills with notes, and a note is a file: readable with cat, searchable with grep, editable with the same tools a session uses on any other file, and yours to copy out of the instance whenever you want it somewhere else. The instance's Claude Code home turns the built-in memory off, so this directory and your customization files are what outlives a conversation.

<instance>/knowledge/
  common.md              handed to every session at its start
  deployment.md          one topic
  the-payments-api.md    one topic
  who-runs-the-build.md  one topic
  files/                 what a note needs of its own: a template, an image

The one directory knowledge/ holds is files/: the files a note needs of its own, in whatever layout and format suits them. None of it is a note, so index and validate pass it over. Any other directory is reported the way a stray file is, since nothing here would ever look in it.

Facts only. A note says what is true and where that came from; what the team is held to is customization, in your words, where you can read it. The one test is the same one that sorts any line: a line that can be obeyed or broken belongs in customization, and a line that is true or false belongs here.

The note

A note opens with four fields and nothing else, then the body, which is ordinary Markdown.

---
summary: How this instance is deployed, and who may press it
tags: [deployment, release, ci]
sources: [projects/shop/deploy.sh, https://example.com/runbook, <user>]
updated: 2026-09-18
---

The build runs on…
fieldwhat
summaryone line: what the note is about, for somebody deciding whether to open it
tagsat least three, lowercase and hyphenated, no duplicates; they are what a search matches on, so they are a decision the writer makes rather than a word that happens to be in the text
sourceswhere it came from: a path from the instance directory, a URL, or <user> when you said it; never a path under desks/ or archive/, since a desk is filed away when its seat retires and what is filed away is history — what a note needs from a desk is copied into the note, or under knowledge/files/
updatedthe date it last changed, and never a date in the future

The head is those four fields and nothing else, and the filename is lowercase and hyphenated like the tags. That is the whole contract, and validate is what reads it back.

There is no id, no status and no expiry, because there is nothing for them to do: a note that is wrong is edited, and a note that is dead is deleted. One topic per file. A note that has grown two topics is two files.

index and validate

Two tools are served over the directory, and neither keeps anything of its own: both are built from the files every time they are called, so a note changed a moment ago is the note the next call sees. Both go to every seat.

callwhat it answers
index()the header: how many notes there are, when the directory last changed, every tag with its count, and any file it could not read
index(tags)the notes carrying a tag, the ones carrying more of what was asked first
validatethe whole directory against the rules above, one line per problem, each saying the rule it breaks

index matches on tags and never on filenames or summaries. That is the point of it: a search means what somebody decided when they wrote the note, and words are what grep is for. A session looking for a phrase greps the directory like any other; a session looking for a subject asks for the tag.

validate answers with the rule each problem breaks, so a session fixes what it wrote without going to find the contract. The reference has both with their arguments.

The common note

One note is the framework's business. knowledge/common.md is handed to every session at its start, after your customization files, in a frame that names it:

<knowledge source="knowledge/common.md">
---
summary: What everybody here needs on their first turn
…
</knowledge>

It is an ordinary note otherwise, and it is the Leader's to gather: the team, the business, the lingo, where things are, and which notes a newcomer reads first. Because it is handed to everybody, the instance is born asking before it changes — Edit(/knowledge/common.md) is in the ask list, so a session that would rewrite that one file stops for your press while the rest of the directory stays open to write. A permission popup never offers that one-file rule as Always; the Leader settles it with permission when you say so. No file, no frame, no error: a workspace that has learnt nothing yet reads exactly as an empty one does.

A change to it reaches the sessions started after it and no others. When something has to reach a session that is already running, tell it in words, or restart it: restart_worker for a Worker.

Who writes here

Every seat. Edit(/knowledge/**) is one of the rules a fresh instance is born with, so a Worker that has just measured something writes it down where it found it out, without asking anybody and without a tool of its own. The Leader's part is not a gate on the directory; it is the common note, and knowing what is in the rest.

What belongs here is what somebody would otherwise have to find out twice: the measurement and what it was measured on, the trap and what it cost, where a thing lives. What does not belong here is anything that is true only of one round — that goes on a desk, which is what a desk is for.

Next

Customization: the three files that say what this team is held to, and every key of openovai.json.