Skip to content

notio: project memory

Sources & anchors

  • Stack component: projio
  • Canonical artifact: survey component 6 §Convergent patterns docs/log/{idea,task,result,meeting}/
  • Workshop session: Day-2 PM session 2
  • Outline: _outline.md §B

Frame

docs/log/{idea,task,result,...}/ as structured project memory; agent-activity trail; project memory as audit trail. The pain notio solves is why was this run produced?

The pain

A pipeline ran three weeks ago and produced derivatives/preprocess_ieeg/. Git knows what changed: a config bump, two new rules, a bug-fix in a script. DataLad knows which commits of which subdatasets were pinned at the time of the run. The git history does not know why the run happened. It does not know which idea the run was responding to, which issue had been filed against the previous output, which alternative configurations had been tried and rejected, or which downstream report the run was a prerequisite for.

The default mitigation is a docs/notes/ folder where someone — usually the original author, weeks after the fact — types up what they remember. By the time the project has three contributors and ten pipelines, the notes folder is either out of date or empty, and the why is gone.

notio replaces that single-purpose notes/ folder with a structured project memory: a small set of typed note categories, one file per note, named-with-a-timestamp, indexed automatically, and queryable through MCP.

The layout

Every projio-aware project carries the same skeleton under docs/log/:

docs/log/
├── idea/      # speculative captures — possibilities not yet committed to
│   ├── index.md
│   └── idea-<author>-<YYYYMMDD>-<HHMMSS>-<hash>.md
├── task/      # actionable units — scheduled or in flight
│   ├── index.md
│   └── task-<author>-<YYYYMMDD>-<HHMMSS>-<hash>.md
├── result/    # written-up outcomes — surveys, specs, decisions, retros
├── issue/     # filed problems — bugs, blockers, surprises
├── meeting/   # meeting notes
└── goal/      # longer-horizon plans with milestones

Each subdirectory has an auto-generated index.md listing its contents in reverse-chronological order. The naming convention <kind>-<author>-<timestamp>-<short-hash>.md makes every note globally unique and trivially sortable. The index.md is regenerated by notio_reindex(); a manual edit is not the source of truth.

Each note carries a YAML frontmatter with a short, predictable schema: title, date, timestamp, status (open, scheduled, done, archived), actionable: true|false, tags, optional project_primary, optional goal, and a prompt field for tasks that the agent runner will execute. Everything outside the frontmatter is free-form markdown.

The MCP surface

Five small MCP tools cover everyday use:

  • note_create(note_type, ...) scaffolds a new note in the right subdirectory with the timestamped name and the right frontmatter template.
  • note_list(note_type=...) returns the recent notes of a given kind.
  • note_read(path) returns a note's frontmatter and body as structured data.
  • note_search(query) semantic-searches across the corpus (the same corpus indexio also indexes).
  • note_resolve(note_id) resolves a partial timestamp or hash to the exact path.

Behind the tools, notes are plain markdown checked into git. There is no separate database, no daemon. The structure is in the layout and the frontmatter — both of which a human can read and edit by hand. The MCP tools exist so agents can navigate the corpus without grepping filenames.

Agent-activity trail

The docs/log/agent-activity.md file (auto-appended) records, per agent session, a one-paragraph summary of what was done, which task note was sourced, and which result note was produced. It is the running ledger of agent work. When a stranger asks "why was this commit made?", the answer is usually one click away: the commit references a task note, the task note references a source idea, and the result note records what was actually delivered.

This chapter is itself a notio result

The handbook chapter you are reading was produced by the agent system described in chapter 70-agentic. The chain is in the docs/log/ tree of this very repository:

  • The source idea (the proposal to write a stack-axis handbook) lives in docs/log/idea/.
  • The roadmap that ordered the drafting work into chapter-sized tasks lives in docs/log/result/result-arash-20260508-stack-axis-roadmap.md.
  • The task that scheduled the drafting of this chapter group lives in docs/log/task/task-arash-20260511-handbook-60-projio.md.
  • The completion record will land in docs/log/result/ once the drafts are checked in.

The chain is navigable: any reader can answer "why does the handbook have a 60-projio chapter, what shaped its scope, and which agent session wrote it?" by following four file references. The git-history-only answer to the same question is a date, a hash, and a commit message — accurate but unilluminating.

What the convention costs

The convention is not free. Every dispatched task creates at least one task note and usually one result note; that is a directory that grows monotonically. Stale tasks (status: scheduled that never executed) accumulate; the index files grow long. notio supplies a few hygiene tools (note_update(path, status="archived"), automatic re-index) but the long-term curation is social — the same as for any structured-log discipline.

The stack-axis survey records that all four study projects in the cohort keep docs/log/{idea,issue,task,result,meeting}/ with an index.md, though two of them (msol) have notio.enabled: false in config while still using the directory layout — an example of the enabled-flag drift the handbook is honest about.

What it gives you back

When notio is consistently used, the project's audit trail becomes queryable. "Why did preprocess_ieeg run on 2026-04-22?" resolves to a task note. "What was the alternative we discussed for the spike-sorter?" resolves to an idea note. "What did the May collaboration meeting decide?" resolves to a meeting note. The next chapter shows how pipeio plugs into the same structure to record which config and which commit produced which derivative output, closing the loop from idea to evidence.

Further reading

  • The Turing Way — structured note-keeping, provenance recording, and metadata conventions in team and solo research.