This is the full developer documentation for Modeled Information Format (MIF)
# Introduction
> MIF — the Modeled Information Format specification: a vendor-neutral data model for portable AI memory.
# Modeled Information Format
[Section titled “Modeled Information Format”](#modeled-information-format)
> A vendor-neutral data model for portable AI memory, with dual human-readable Markdown and machine-processable JSON-LD representations.
This site is the **normative specification** for MIF (Modeled Information Format). It defines the data model, the two on-disk formats, the type system, and the conformance rules, and it serves the canonical JSON Schemas.
## Read the specification
[Section titled “Read the specification”](#read-the-specification)
Start with the [Specification Overview](/specification/overview/), then work through the core model, the Markdown and JSON-LD formats, the data types, and the reference sections (conformance, conversion, security, appendices) from the sidebar.
## Schemas
[Section titled “Schemas”](#schemas)
The canonical JSON Schemas are served under [`/schema/`](https://mif-spec.dev/schema/index.json):
* `https://mif-spec.dev/schema/mif.schema.json`
* `https://mif-spec.dev/schema/citation.schema.json`
* `https://mif-spec.dev/schema/ontology/ontology.schema.json`
* `https://mif-spec.dev/schema/definitions/entity-reference.schema.json`
`$id` values are stable and unversioned; immutable per-release mirrors are available at `/schema//…`. See the [schema catalog](https://mif-spec.dev/schema/index.json) and [versioning notes](https://mif-spec.dev/schema/VERSIONING.md).
## Guides, tutorials, and design records
[Section titled “Guides, tutorials, and design records”](#guides-tutorials-and-design-records)
Task-oriented guides, tutorials, API references, and the Architecture Decision Records live in the ecosystem documentation at [modeled-information-format.github.io](https://modeled-information-format.github.io/).
# MIF Namespace
> The MIF JSON-LD vocabulary served at https://mif-spec.dev/ns/, with human and machine-readable forms.
Base IRI: `https://mif-spec.dev/ns/`
The MIF vocabulary defines the terms used by the JSON-LD projection of MIF concept documents. It is the `@vocab` base of the canonical context at [`/schema/context.jsonld`](/schema/context.jsonld). Term IRIs follow the pattern `https://mif-spec.dev/ns/` (for example `https://mif-spec.dev/ns/Concept`).
This page is derived from the canonical context, so it stays in step with the schema. The same vocabulary is available as a machine-readable RDFS document:
* Machine-readable vocabulary: [`/ns/vocabulary.jsonld`](/ns/vocabulary.jsonld)
* Canonical JSON-LD context: [`/schema/context.jsonld`](/schema/context.jsonld)
MIF also reuses Dublin Core (`dc`), Schema.org (`schema`), W3C PROV (`prov`), and XML Schema (`xsd`) terms. Those are defined by their own vocabularies and are not redefined here.
## Classes
[Section titled “Classes”](#classes)
| Term | IRI | Description |
| -------------------- | ------------------------ | -------------------------------------------------------------------------------------------------------------------------------- |
| `AgentInferred` | `mif:AgentInferred` | Inferred by an AI agent. |
| `Citation` | `mif:Citation` | A citation or bibliographic reference. |
| `Concept` | `mif:Concept` | The concept document type: every MIF concept declares @type Concept. Also used as the entity type for an abstract idea or topic. |
| `ConflictsWith` | `mif:ConflictsWith` | Contradicts another concept. |
| `Created` | `mif:Created` | Authored by an entity. |
| `DerivedFrom` | `mif:DerivedFrom` | Created based on a source. |
| `DocumentReference` | `mif:DocumentReference` | A reference to an external document, by URI and hash, rather than embedded content. |
| `EmbeddingReference` | `mif:EmbeddingReference` | A reference to a vector embedding. |
| `Entity` | `mif:Entity` | A named entity. |
| `EntityData` | `mif:EntityData` | Structured entity data. |
| `EntityReference` | `mif:EntityReference` | A reference to an entity within a concept. |
| `EpisodicType` | `mif:EpisodicType` | Concept type for events, experiences, sessions, and incidents. |
| `ExternalImport` | `mif:ExternalImport` | Imported from an external system. |
| `File` | `mif:File` | A file or document. |
| `HighConfidence` | `mif:HighConfidence` | High confidence inference. |
| `Implements` | `mif:Implements` | Realizes a concept or pattern. |
| `LowConfidence` | `mif:LowConfidence` | Low confidence inference. |
| `Memory` | `mif:Memory` | The concept document type under the v0.1 name. Deprecated alias of Concept. |
| `MentionedIn` | `mif:MentionedIn` | Referenced in a concept. |
| `ModerateConfidence` | `mif:ModerateConfidence` | Moderate confidence inference. |
| `OntologyReference` | `mif:OntologyReference` | A reference to an ontology definition. |
| `Organization` | `mif:Organization` | A company, institution, or group. |
| `PartOf` | `mif:PartOf` | Component of a larger whole. |
| `Person` | `mif:Person` | A human individual. |
| `ProceduralType` | `mif:ProceduralType` | Concept type for processes, runbooks, patterns, and how-to guides. |
| `RelatesTo` | `mif:RelatesTo` | General relationship. |
| `Relationship` | `mif:Relationship` | A typed relationship between concepts or entities. |
| `SemanticType` | `mif:SemanticType` | Concept type for facts, concepts, decisions, preferences, and knowledge. |
| `Supersedes` | `mif:Supersedes` | Replaces an older concept. |
| `SystemGenerated` | `mif:SystemGenerated` | Generated by the system. |
| `Technology` | `mif:Technology` | A technology, framework, or tool. |
| `TemporalMetadata` | `mif:TemporalMetadata` | Temporal validity and decay metadata. |
| `Uncertain` | `mif:Uncertain` | Uncertain or unverified. |
| `UserExplicit` | `mif:UserExplicit` | Directly stated by the user. |
| `UserImplicit` | `mif:UserImplicit` | Inferred from user behavior. |
| `UserStated` | `mif:UserStated` | Stated by the user. |
| `Uses` | `mif:Uses` | Uses a technology or tool. |
| `Vector` | `mif:Vector` | An embedding vector. |
| `Verified` | `mif:Verified` | Independently verified. |
## Properties
[Section titled “Properties”](#properties)
| Property | IRI | Range | Description |
| ---------------------- | -------------------------- | -------------- | --------------------------------------------------------------------- |
| `accessCount` | `mif:accessCount` | `xsd:integer` | Number of times accessed. |
| `accessed` | `mif:accessed` | `xsd:dateTime` | When the citation was last accessed. |
| `agent` | `mif:agent` | — | The agent that created the concept. |
| `agentVersion` | `mif:agentVersion` | — | Version of the creating agent. |
| `algorithm` | `mif:algorithm` | — | Hash algorithm. |
| `aliases` | `mif:aliases` | — | Alternative names or identifiers. |
| `blocks` | `mif:blocks` | — | Named content blocks. |
| `byteLength` | `mif:byteLength` | `xsd:integer` | Size of the referenced document in bytes. |
| `citationRole` | `mif:citationRole` | — | How the citation relates to the concept. |
| `citationType` | `mif:citationType` | — | Category of the citation source. |
| `citations` | `mif:citations` | — | Collection of citations. |
| `conceptType` | `mif:conceptType` | — | The base concept type classification. |
| `confidence` | `mif:confidence` | `xsd:decimal` | Confidence score (0.0-1.0). |
| `content` | `mif:content` | `xsd:string` | The textual content of a concept. |
| `contentType` | `mif:contentType` | — | MIME type of the referenced document. |
| `currentStrength` | `mif:currentStrength` | `xsd:decimal` | Current concept strength (0.0-1.0). |
| `data` | `mif:data` | — | Raw vector data. |
| `decay` | `mif:decay` | — | Decay model container. |
| `dimensions` | `mif:dimensions` | `xsd:integer` | Vector dimensions. |
| `documentType` | `mif:documentType` | — | Category of the referenced document. |
| `documents` | `mif:documents` | — | Collection of external document references. |
| `embedding` | `mif:embedding` | — | Embedding reference container. |
| `encoding` | `mif:encoding` | — | Vector encoding format. |
| `entities` | `mif:entities` | — | Entity references. |
| `entity` | `mif:entity` | — | Reference to a single entity. |
| `entityType` | `mif:entityType` | — | Type classification of an entity. |
| `entity_id` | `mif:entity_id` | — | Entity identifier. |
| `entity_type` | `mif:entity_type` | — | Alias for entityType. |
| `extensions` | `mif:extensions` | — | Vendor-specific extension data. |
| `halfLife` | `mif:halfLife` | `xsd:duration` | Decay half-life duration. |
| `hash` | `mif:hash` | — | Content hash of a referenced document. |
| `lastAccessed` | `mif:lastAccessed` | `xsd:dateTime` | When the concept was last accessed. |
| `lastReinforced` | `mif:lastReinforced` | `xsd:dateTime` | When the concept was last reinforced. |
| `memoryType` | `mif:memoryType` | — | The base memory type classification. Deprecated alias of conceptType. |
| `metadata` | `mif:metadata` | — | Arbitrary relationship metadata, carried as a JSON literal. |
| `model` | `mif:model` | — | Decay model type (none, linear, exponential, step). |
| `modelVersion` | `mif:modelVersion` | — | Embedding model version. |
| `namespace` | `mif:namespace` | — | Hierarchical scope for categorization. |
| `normalized` | `mif:normalized` | `xsd:boolean` | Whether the vector is normalized. |
| `note` | `mif:note` | — | Annotation or note text. |
| `ontology` | `mif:ontology` | — | Ontology reference container. |
| `provenance` | `mif:provenance` | — | Provenance metadata container. |
| `recordedAt` | `mif:recordedAt` | `xsd:dateTime` | Transaction time (when recorded). |
| `reinforcementHistory` | `mif:reinforcementHistory` | — | Ordered list of reinforcement events. |
| `relationshipType` | `mif:relationshipType` | — | The type of relationship. |
| `relationships` | `mif:relationships` | — | Relationship references. |
| `relevance` | `mif:relevance` | `xsd:decimal` | Relevance score (0.0-1.0). |
| `retrievedAt` | `mif:retrievedAt` | `xsd:dateTime` | When the referenced document was retrieved. |
| `role` | `mif:role` | — | Role in the concept context. |
| `sourceRef` | `mif:sourceRef` | — | Reference to the original source. |
| `sourceText` | `mif:sourceText` | — | Text that was embedded. |
| `sourceType` | `mif:sourceType` | — | How the concept was created. |
| `strength` | `mif:strength` | `xsd:decimal` | Relationship strength (0.0-1.0). |
| `tags` | `mif:tags` | — | Classification tags. |
| `target` | `mif:target` | — | The target of the relationship. |
| `temporal` | `mif:temporal` | — | Temporal metadata container. |
| `trustLevel` | `mif:trustLevel` | — | Trust classification level. |
| `ttl` | `mif:ttl` | `xsd:duration` | Time-to-live duration. |
| `uri` | `mif:uri` | — | URI reference. |
| `validFrom` | `mif:validFrom` | `xsd:dateTime` | When the fact becomes valid. |
| `validUntil` | `mif:validUntil` | `xsd:dateTime` | When the fact expires. |
| `value` | `mif:value` | — | Hash value. |
| `vector` | `mif:vector` | — | Vector data container. |
| `vectorUri` | `mif:vectorUri` | — | URI to external vector data. |
| `version` | `mif:version` | — | Version string. |
# Appendices
> Quick references for YAML frontmatter, relationship types, entity syntax, and citations.
## Appendix A: YAML Frontmatter Quick Reference
[Section titled “Appendix A: YAML Frontmatter Quick Reference”](#appendix-a-yaml-frontmatter-quick-reference)
```yaml
---
# Required
id: uuid-v4
type: semantic|episodic|procedural
created: ISO-8601-datetime
# Recommended
modified: ISO-8601-datetime
ontology:
id: ontology-identifier # Matches ontology.id in definition
version: "1.0.0" # Semantic version (optional)
uri: https://example.com/ont # Ontology URL (optional)
namespace: hierarchical/path
title: "Human Title"
tags: [tag1, tag2]
# Optional
aliases: ["Alt Name 1", "Alt Name 2"]
temporal:
validFrom: ISO-8601-datetime
validUntil: ISO-8601-datetime | null
recordedAt: ISO-8601-datetime
ttl: ISO-8601-duration
decay:
model: none|linear|exponential|step
halfLife: ISO-8601-duration
strength: 0.0-1.0
accessCount: integer
lastAccessed: ISO-8601-datetime
provenance:
sourceType: user_explicit|user_implicit|agent_inferred|external_import|system_generated
sourceRef: uri
agent: string
confidence: 0.0-1.0
trustLevel: verified|user_stated|high_confidence|moderate_confidence|low_confidence|uncertain
embedding:
model: string
modelVersion: string
dimensions: integer
sourceText: string
extensions:
provider_name:
custom_field: value
---
```
***
## Appendix B: Relationship Types Quick Reference
[Section titled “Appendix B: Relationship Types Quick Reference”](#appendix-b-relationship-types-quick-reference)
Relationships appear in a `## Relationships` body section as `- [Text](/path/target.md)`, mirroring the authoritative frontmatter `relationships[]`.
| Body Markdown Syntax | JSON-LD `type` | Description |
| ---------------------------------- | ---------------- | -------------------- |
| `- relates-to [X](/path/x.md)` | `relates-to` | General relationship |
| `- derived-from [X](/path/x.md)` | `derived-from` | Created from source |
| `- supersedes [X](/path/x.md)` | `supersedes` | Replaces older |
| `- conflicts-with [X](/path/x.md)` | `conflicts-with` | Contradicts |
| `- part-of [X](/path/x.md)` | `part-of` | Component of |
| `- implements [X](/path/x.md)` | `implements` | Realizes |
| `- uses [X](/path/x.md)` | `uses` | Utilizes |
| `- created-by [X](/path/x.md)` | `created-by` | Authored by |
| `- mentioned-in [X](/path/x.md)` | `mentioned-in` | Referenced in |
***
## Appendix C: Entity Reference Syntax
[Section titled “Appendix C: Entity Reference Syntax”](#appendix-c-entity-reference-syntax)
| Markdown | Meaning |
| ----------------------------- | ---------------------------- |
| `@[[Name]]` | Reference entity by name |
| `@[[Name\|Person]]` | Reference with explicit type |
| `@[[Name\|uses]]` | Reference with relationship |
| `@[[Name\|Technology\|uses]]` | Type and relationship |
***
## Appendix D: Citations Quick Reference
[Section titled “Appendix D: Citations Quick Reference”](#appendix-d-citations-quick-reference)
### Citation Types
[Section titled “Citation Types”](#citation-types)
| Type | Description |
| --------------- | -------------------------- |
| `article` | Journal article, blog post |
| `book` | Published book |
| `paper` | Conference/research paper |
| `website` | General website |
| `documentation` | Technical documentation |
| `repository` | Code repository |
| `video` | Video content |
| `podcast` | Podcast episode |
| `specification` | Technical specification |
| `dataset` | Data source |
| `tool` | Software tool or service |
| `other` | Miscellaneous source |
### Citation Roles
[Section titled “Citation Roles”](#citation-roles)
| Role | Description |
| ------------- | ---------------------------- |
| `supports` | Provides supporting evidence |
| `refutes` | Contradicts or disputes |
| `background` | General context/reference |
| `methodology` | Method or approach source |
| `contradicts` | Conflicts with claims |
| `extends` | Builds upon cited work |
| `derived` | Direct derivation source |
| `source` | Primary source material |
| `example` | Illustrative example |
| `review` | Critical review/analysis |
### Frontmatter Syntax
[Section titled “Frontmatter Syntax”](#frontmatter-syntax)
```yaml
citations:
- type: article # REQUIRED
title: "Citation Title" # REQUIRED
url: https://example.com # REQUIRED
role: supports # REQUIRED
author: "@[[Name|Person]]" # OPTIONAL
date: 2024-06-15 # OPTIONAL
accessed: 2026-01-20 # OPTIONAL
relevance: 0.95 # OPTIONAL (0-1)
note: "Annotation" # OPTIONAL
```
### Body Section Syntax
[Section titled “Body Section Syntax”](#body-section-syntax)
```markdown
## Citations
- [Title](url) by @[[Author|Person]] (date)
- **Type**: article
- **Role**: supports
- **Relevance**: 0.95
- Long-form annotation here.
```
***
## References
[Section titled “References”](#references)
* [RFC 2119: Key words for use in RFCs](https://www.rfc-editor.org/rfc/rfc2119)
* [JSON-LD 1.1](https://www.w3.org/TR/json-ld11/)
* [Dublin Core Metadata Terms](https://www.dublincore.org/specifications/dublin-core/dcmi-terms/)
* [W3C PROV-DM](https://www.w3.org/TR/prov-dm/)
* [ISO 8601: Date and Time Format](https://www.iso.org/iso-8601-date-and-time-format.html)
* [Obsidian Help](https://help.obsidian.md/)
# Conformance Levels
> Level 1, 2, and 3 conformance requirements for MIF implementations.
### Level 1: Core (REQUIRED for conformance)
[Section titled “Level 1: Core (REQUIRED for conformance)”](#level-1-core-required-for-conformance)
* `id` (UUID), `type`, `content`, `created` fields
* Valid OKF bundle shape (a directory of `.md` concept files)
* Markdown-link relationship edges in a `## Relationships` section
### Level 2: Standard (RECOMMENDED)
[Section titled “Level 2: Standard (RECOMMENDED)”](#level-2-standard-recommended)
* All Level 1 requirements
* Namespace support
* Entity references
* Relationship types
* Temporal metadata (timestamps)
### Level 3: Full (OPTIONAL)
[Section titled “Level 3: Full (OPTIONAL)”](#level-3-full-optional)
* All Level 2 requirements
* Bi-temporal model
* Decay functions
* W3C PROV provenance
* Embedding references
* Citations with rich metadata
* Compression support
* Extension support
### Conformance Statement
[Section titled “Conformance Statement”](#conformance-statement)
Implementations SHOULD declare their conformance level:
.mif/config.yaml
```yaml
mif_version: "1.0.0"
conformance_level: 2
extensions:
- subcog
- custom-provider
```
# Conversion Rules
> Rules for converting between Markdown and JSON-LD formats.
Markdown is canonical; the JSON-LD projection is regenerated from it. The round trip MUST be lossless.
### Markdown to JSON-LD
[Section titled “Markdown to JSON-LD”](#markdown-to-json-ld)
1. Parse the YAML frontmatter, including the authoritative `relationships[]`, and map each property into the JSON-LD projection: `id` becomes `@id` (`urn:mif:`), `type` becomes `conceptType`, and the remaining fields pass through under the context.
2. Take the full Markdown body, verbatim, as the `content` field. The OKF-legible `## Relationships` body mirror is part of the body, so it is carried inside `content`.
3. Add the projection mirror fields the converter always emits: `timestamp` (= `modified`, else `created`) and, when `summary` is present, `description` (= `summary`).
### JSON-LD to Markdown
[Section titled “JSON-LD to Markdown”](#json-ld-to-markdown)
1. Recover the frontmatter from the JSON-LD properties: `@id` (`urn:mif:`) becomes `id` (``), `conceptType` becomes `type`, and the remaining properties (including `relationships[]`) pass through.
2. Write the `content` field back as the Markdown body, verbatim. Any `## Relationships`/`## Entities` body mirror is authored content preserved unchanged, which is what keeps the round trip lossless.
### Example Conversion
[Section titled “Example Conversion”](#example-conversion)
**Input (JSON-LD):**
```json
{
"@context": "https://mif-spec.dev/schema/context.jsonld",
"@type": "Concept",
"conceptType": "semantic",
"@id": "urn:mif:550e8400-e29b-41d4-a716-446655440000",
"title": "Dark Mode",
"content": "User prefers dark mode\n\n## Relationships\n\n- relates-to [UI Preferences](/semantic/ui-prefs.md)",
"created": "2026-01-15T10:30:00Z",
"relationships": [
{"type": "relates-to", "target": "/semantic/ui-prefs.md"}
]
}
```
**Output (Markdown):**
```markdown
---
id: 550e8400-e29b-41d4-a716-446655440000
type: semantic
created: 2026-01-15T10:30:00Z
title: Dark Mode
relationships:
- type: relates-to
target: /semantic/ui-prefs.md
---
User prefers dark mode
## Relationships
- relates-to [UI Preferences](/semantic/ui-prefs.md)
```
### Citations Conversion
[Section titled “Citations Conversion”](#citations-conversion)
`citations` is authored in frontmatter in its final shape and passes through to the JSON-LD projection verbatim (it is part of the converter’s passthrough set, so the frontmatter and projection forms are identical). Each entry is a `Citation` object: `@type`, `citationType`, `citationRole`, `title`, and `url` are required; `author`, `date`, `accessed`, `relevance`, and `note` are optional. The `author` value is a wiki-link string and is preserved as written. Any `## Citations` body mirror is authored content carried inside `content`.
**Example (frontmatter, identical in the JSON-LD projection):**
```yaml
citations:
- "@type": Citation
citationType: article
citationRole: supports
title: "Research Paper"
url: https://example.com/paper
author: "@[[Jane Smith|Person]]"
date: "2025-11-15"
accessed: "2026-01-18"
relevance: 0.92
```
# Data Model
> Required and optional fields, schema definitions, and core data structures.
### Concept
[Section titled “Concept”](#concept)
A concept is the atomic element of MIF — a single `.md` file in a bundle. It contains:
| Property | Required | Type | Description |
| --------------- | ----------- | -------- | ----------------------------------------------------- |
| `id` | REQUIRED | UUID | Globally unique identifier (stable across relocation) |
| `content` | REQUIRED | String | The concept content (Markdown) |
| `type` | REQUIRED | Enum | Knowledge classification (see below) |
| `created` | REQUIRED | DateTime | When the memory was created |
| `modified` | RECOMMENDED | DateTime | When last modified |
| `ontology` | RECOMMENDED | Object | Reference to applied ontology |
| `namespace` | RECOMMENDED | String | Hierarchical scope |
| `tags` | OPTIONAL | Array | Classification tags |
| `entities` | OPTIONAL | Array | Referenced entities |
| `relationships` | OPTIONAL | Array | Typed relationships |
| `temporal` | OPTIONAL | Object | Temporal validity data |
| `provenance` | OPTIONAL | Object | Source and trust data |
| `embedding` | OPTIONAL | Object | Embedding reference |
| `citations` | OPTIONAL | Array | Citation references (Level 3) |
| `summary` | OPTIONAL | String | Compressed content summary (Level 3) |
| `compressedAt` | OPTIONAL | DateTime | When compression was applied (Level 3) |
| `extensions` | OPTIONAL | Object | Provider-specific data |
The frontmatter `type` field holds the base knowledge classification; in the JSON-LD projection produced by `scripts/mif_convert.py`, this value is surfaced as `conceptType`.
### Knowledge Types
[Section titled “Knowledge Types”](#knowledge-types)
Every concept declares one of three **base knowledge types**, a general taxonomy of how knowledge is structured:
| Type | Description | Namespace Hint |
| ------------ | ------------------------------------------------------------ | -------------- |
| `semantic` | Declarative knowledge: facts, concepts, decisions, schemas | `semantic/*` |
| `episodic` | Time-bound records: events, incidents, changelog/deprecation | `episodic/*` |
| `procedural` | How-to knowledge: runbooks, processes, patterns, migrations | `procedural/*` |
**Base Type Descriptions:**
* **Semantic**: Declarative knowledge about the world—facts, concepts, decisions, preferences, and relationships between entities. Examples: architectural decisions, technology choices, schemas, domain knowledge.
* **Episodic**: Time-bound records of events—incidents, deprecations, changelog entries. These concepts have strong temporal context and represent “what happened.”
* **Procedural**: How-to knowledge—runbooks, migration guides, code patterns, and step-by-step processes. These concepts describe “how to do” something.
The cognitive-memory origin of this triad, and its reinterpretation for agent memory, live in the AI Memory profile (`profiles/ai-memory/`).
#### Ontology-Extended Types
[Section titled “Ontology-Extended Types”](#ontology-extended-types)
Ontologies MAY define extended types using namespace prefixes:
```yaml
# In ontology definition
entity_types:
- name: decision
base: semantic
description: "Architectural or design decision"
- name: runbook
base: procedural
description: "Step-by-step operational guide"
- name: incident
base: episodic
description: "Production incident record"
```
When using ontology-extended types, the `type` field uses the base type, while specific categorization is expressed through the namespace:
```yaml
---
type: semantic
namespace: _semantic/decisions
ontology:
id: mif-base
---
```
This allows ontologies to define rich taxonomies while maintaining interoperability through the base type foundation.
### Ontology Reference
[Section titled “Ontology Reference”](#ontology-reference)
A concept MAY declare which ontology it conforms to using the `ontology` field:
| Property | Required | Type | Description |
| --------- | -------- | ------ | ------------------------------------------------------------------ |
| `id` | REQUIRED | String | Ontology identifier (matches `ontology.id` in ontology definition) |
| `version` | OPTIONAL | String | Semantic version (e.g., “1.0.0”) |
| `uri` | OPTIONAL | URI | URL to the ontology definition file |
**Example:**
```yaml
ontology:
id: regenerative-agriculture
version: "1.0.0"
uri: https://raw.githubusercontent.com/modeled-information-format/MIF/main/ontologies/examples/regenerative-agriculture.ontology.yaml
```
The `ontology.id` MUST match the `ontology.id` field in the referenced ontology definition file. This enables:
* Validation that namespace paths conform to the ontology’s defined namespaces
* Discovery pattern matching for entity type suggestions
* Schema validation for entity-specific fields
# Embeddings
> Embedding reference specifications for vector search integration.
### Model-Agnostic Approach
[Section titled “Model-Agnostic Approach”](#model-agnostic-approach)
MIF stores embedding metadata, not raw vectors:
```yaml
embedding:
model: text-embedding-3-small
modelVersion: "2024-01"
dimensions: 1536
sourceText: "The text that was embedded"
normalized: true
```
This allows:
* Re-embedding on import with different models
* Smaller file sizes
* Model migration without data loss
### Optional Vector Storage
[Section titled “Optional Vector Storage”](#optional-vector-storage)
For providers that need vector portability:
**External Reference:**
```yaml
embedding:
model: text-embedding-3-small
sourceText: "..."
vectorUri: "urn:mif:vector:550e8400-e29b-41d4-a716-446655440000"
```
**JSON-LD with external vector URI:**
```json
"embedding": {
"model": "text-embedding-3-small",
"sourceText": "...",
"vectorUri": "urn:mif:vector:550e8400-e29b-41d4-a716-446655440000"
}
```
# Entity Types
> Person, Organization, Technology, Concept, and File entity type definitions.
MIF provides an **extensible entity type system**. Implementations SHOULD support the core types for interoperability, but MAY define custom types for domain-specific needs.
### Entity Type Architecture
[Section titled “Entity Type Architecture”](#entity-type-architecture)
Entity types are **not hard-coded**. They are defined in vault configuration and can be extended per-project:
.mif/config.yaml
```yaml
entity_types:
# Core types (RECOMMENDED for interoperability)
- name: Person
description: Human individual
icon: "\U0001F464"
color: blue
- name: Organization
description: Company, team, or group
icon: "\U0001F3E2"
color: purple
- name: Technology
description: Tool, language, or framework
icon: "\U0001F527"
color: green
- name: Concept
description: Abstract idea or topic
icon: "\U0001F4A1"
color: yellow
- name: File
description: Document or code file
icon: "\U0001F4C4"
color: gray
# Custom types (domain-specific)
- name: Project
description: Work initiative or product
icon: "\U0001F4E6"
color: orange
- name: Event
description: Meeting, deadline, or occurrence
icon: "\U0001F4C5"
color: red
- name: Location
description: Physical or virtual place
icon: "\U0001F4CD"
color: teal
```
### Core Entity Types (Recommended)
[Section titled “Core Entity Types (Recommended)”](#core-entity-types-recommended)
For maximum interoperability, implementations SHOULD recognize these five core types:
| Type | Description | Example | URI |
| -------------- | ---------------------------- | ----------------- | ------------------ |
| `Person` | Human individual | User, team member | `mif:Person` |
| `Organization` | Company, team, or group | Acme Corp | `mif:Organization` |
| `Technology` | Tool, language, or framework | Python, React | `mif:Technology` |
| `Concept` | Abstract idea or topic | Dark Mode | `mif:Concept` |
| `File` | Document or code file | src/main.py | `mif:File` |
### Custom Entity Types
[Section titled “Custom Entity Types”](#custom-entity-types)
Providers MAY define additional entity types using namespaced URIs:
```yaml
# Custom type definition
entity_types:
- name: Animal
namespace: farm # Results in URI: farm:Animal
description: Livestock or pet
properties:
- name: breed
type: string
- name: birth_date
type: date
- name: registry_id
type: string
```
**JSON-LD representation of custom types:**
```json
{
"@context": [
"https://mif-spec.dev/schema/context.jsonld",
{"farm": "https://example.org/farm/"}
],
"@type": "farm:Animal",
"@id": "urn:mif:entity:animal:sheep-001",
"name": "Dolly",
"farm:breed": "Dorper",
"farm:birth_date": "2025-03-15"
}
```
### Entity Subtyping (`subtype_of`)
[Section titled “Entity Subtyping (subtype\_of)”](#entity-subtyping-subtype_of)
An entity type MAY declare `subtype_of`, naming one or more parent entity types it specializes. A subtype is **substitutable** for any of its supertypes wherever the supertype is admissible — most notably a relationship endpoint domain: an edge whose `from`/`to` names a parent type also admits any of its subtypes.
```yaml
entity_types:
- name: incident-report
base: episodic
- name: security-incident
base: episodic
subtype_of: [incident-report] # substitutable wherever incident-report is admissible
```
Rules (enforced by `scripts/validate-ontologies.py`):
* Every parent MUST resolve to a declared entity type — in this ontology, or in one it `extends` (resolved across the full extends chain).
* A subtype’s `required` set MUST include every `required` field of each parent (substitutability). A subtype SHOULD add, not retype, parent fields (retyping is not machine-checked).
* The `subtype_of` graph MUST be acyclic, and a type cannot be its own subtype.
`subtype_of` is optional and additive; ontologies that omit it are unaffected. It projects to JSON-LD as `mif:subtypeOf` (a set of entity-type `@id`s).
### Entity Schema
[Section titled “Entity Schema”](#entity-schema)
**Markdown (in `.mif/entities/` directory):**
.mif/entities/person/jane-doe.yaml
```yaml
id: jane-doe
type: Person
name: Jane Doe
aliases:
- J. Doe
- jdoe
properties:
email: jane@example.com
role: Engineer
```
**JSON-LD:**
```json
{
"@context": "https://mif-spec.dev/schema/context.jsonld",
"@type": "Person",
"@id": "urn:mif:entity:person:jane-doe",
"name": "Jane Doe",
"aliases": ["J. Doe", "jdoe"],
"properties": {
"email": "jane@example.com",
"role": "Engineer"
}
}
```
### Entity References in Memories
[Section titled “Entity References in Memories”](#entity-references-in-memories)
**Markdown:**
```markdown
## Entities
- mentions @[[Jane Doe]]
- uses @[[Python|Technology]]
- about @[[Dark Mode|Concept]]
```
**JSON-LD:**
```json
"entities": [
{
"@type": "EntityReference",
"entity": {"@id": "urn:mif:entity:person:jane-doe"},
"role": "mentions"
}
]
```
# File Format
> File extensions, encoding requirements, and YAML frontmatter structure.
### File Extensions
[Section titled “File Extensions”](#file-extensions)
| Extension | Format | MIME Type |
| --------- | ---------------------------- | ----------------------------------------------------- |
| `.md` | Markdown (canonical) | `text/markdown; variant=mif` |
| `.jsonld` | JSON-LD (derived projection) | `application/ld+json; profile="https://mif-spec.dev"` |
Concept files use the `.md` extension only. The derived JSON-LD projection uses `.jsonld` (never `.md`), so OKF’s `*.md` glob never ingests it.
### Concept Identity
[Section titled “Concept Identity”](#concept-identity)
A concept’s OKF identity is its bundle-relative path minus the `.md` extension. The frontmatter `id` field MUST be a UUID, providing a stable identity that survives concept relocation; it is MIF-only and invisible to OKF.
### File Naming
[Section titled “File Naming”](#file-naming)
Human-readable, path-meaningful names are RECOMMENDED, since the OKF concept ID is derived from the path:
```plaintext
dark-mode-preference.md
```
The UUID lives in frontmatter rather than the filename:
```plaintext
_semantic/preferences/dark-mode-preference.md
```
The derived projection sits alongside as `dark-mode-preference.jsonld`.
### Directory Structure
[Section titled “Directory Structure”](#directory-structure)
A MIF vault SHOULD follow this structure:
```plaintext
vault/
├── .mif/ # MIF configuration
│ ├── config.yaml # Vault configuration
│ ├── context.jsonld # Local JSON-LD context
│ └── entities/ # Entity definitions
│ ├── person/
│ ├── organization/
│ ├── technology/
│ ├── concept/
│ └── file/
├── memories/ # Concept files
│ ├── {namespace}/ # Namespace directories
│ │ ├── {slug}.md # Canonical concept
│ │ └── {slug}.jsonld # Derived projection
│ └── ...
└── README.md # Vault documentation
```
# JSON-LD Context
> The MIF JSON-LD context definition and namespace mappings.
### Context URL
[Section titled “Context URL”](#context-url)
```plaintext
https://mif-spec.dev/schema/context.jsonld
```
### Context Definition
[Section titled “Context Definition”](#context-definition)
The following is a representative subset of `schema/context.jsonld`; the full context includes additional term definitions.
```json
{
"@context": {
"@version": 1.1,
"mif": "https://mif-spec.dev/ns/",
"schema": "https://schema.org/",
"dc": "http://purl.org/dc/terms/",
"prov": "http://www.w3.org/ns/prov#",
"xsd": "http://www.w3.org/2001/XMLSchema#",
"Memory": "mif:Memory",
"Entity": "mif:Entity",
"Relationship": "mif:Relationship",
"TemporalMetadata": "mif:TemporalMetadata",
"EmbeddingReference": "mif:EmbeddingReference",
"EntityReference": "mif:EntityReference",
"OntologyReference": "mif:OntologyReference",
"Person": "mif:Person",
"Organization": "mif:Organization",
"Technology": "mif:Technology",
"Concept": "mif:Concept",
"File": "mif:File",
"id": "@id",
"type": "@type",
"content": "mif:content",
"conceptType": { "@id": "mif:conceptType", "@type": "@vocab" },
"memoryType": { "@id": "mif:memoryType", "@type": "@vocab" },
"title": "dc:title",
"namespace": "mif:namespace",
"tags": "mif:tags",
"aliases": "mif:aliases",
"created": {
"@id": "dc:created",
"@type": "xsd:dateTime"
},
"modified": {
"@id": "dc:modified",
"@type": "xsd:dateTime"
},
"ontology": "mif:ontology",
"entities": "mif:entities",
"relationships": {
"@id": "mif:relationships",
"@container": "@set",
"@context": {
"@vocab": "https://mif-spec.dev/ns/",
"type": { "@id": "mif:relationshipType", "@type": "@vocab" },
"target": { "@id": "mif:target", "@type": "@id" }
}
},
"temporal": "mif:temporal",
"provenance": "mif:provenance",
"embedding": "mif:embedding",
"extensions": "mif:extensions",
"relationshipType": "mif:relationshipType",
"target": "mif:target",
"strength": "mif:strength",
"validFrom": {
"@id": "mif:validFrom",
"@type": "xsd:dateTime"
},
"validUntil": {
"@id": "mif:validUntil",
"@type": "xsd:dateTime"
},
"recordedAt": {
"@id": "mif:recordedAt",
"@type": "xsd:dateTime"
},
"ttl": "mif:ttl",
"decay": "mif:decay",
"accessCount": "mif:accessCount",
"lastAccessed": {
"@id": "mif:lastAccessed",
"@type": "xsd:dateTime"
},
"sourceType": "mif:sourceType",
"sourceRef": "mif:sourceRef",
"agent": "mif:agent",
"confidence": "mif:confidence",
"trustLevel": "mif:trustLevel",
"model": "mif:model",
"modelVersion": "mif:modelVersion",
"dimensions": "mif:dimensions",
"sourceText": "mif:sourceText",
"vectorUri": "mif:vectorUri",
"citations": {
"@id": "mif:citations",
"@container": "@set"
},
"Citation": "mif:Citation",
"citationType": {
"@id": "mif:citationType",
"@type": "@vocab"
},
"citationRole": {
"@id": "mif:citationRole",
"@type": "@vocab"
},
"url": {
"@id": "schema:url",
"@type": "@id"
},
"author": "schema:author",
"date": {
"@id": "schema:datePublished",
"@type": "xsd:date"
},
"relevance": {
"@id": "mif:relevance",
"@type": "xsd:decimal"
},
"accessed": {
"@id": "mif:accessed",
"@type": "xsd:dateTime"
},
"note": "mif:note",
"summary": "mif:summary",
"compressedAt": {
"@id": "mif:compressedAt",
"@type": "xsd:dateTime"
}
}
}
```
The canonical terms are `conceptType` (the knowledge taxonomy) and, inside each `relationships[]` entry, `type` (the kebab-case relationship type, scoped to `mif:relationshipType`) and `target`. The legacy terms `memoryType`, the document `@type` value `Memory`, `relationshipType`, and the PascalCase relationship terms (`RelatesTo`, `DerivedFrom`, and so on) are retained as deprecated aliases so existing documents continue to expand.
# JSON-LD Format
> The derived .jsonld projection for machine-processable concept documents.
Markdown is canonical. The JSON-LD form below is a **derived projection**: regenerate it from the `.md` source with `scripts/mif_convert.py`. It uses the `.jsonld` extension (never `.md`, so OKF’s `*.md` glob never ingests it) and MUST round-trip losslessly back to markdown. If the two disagree, markdown wins.
### Structure
[Section titled “Structure”](#structure)
```json
{
"@context": "https://mif-spec.dev/schema/context.jsonld",
"@type": "Concept",
"@id": "urn:mif:550e8400-e29b-41d4-a716-446655440000",
"content": "User prefers dark mode for all applications",
"conceptType": "semantic",
"title": "Dark Mode Preference",
"created": "2026-01-15T10:30:00Z",
"modified": "2026-01-20T14:22:00Z",
"timestamp": "2026-01-20T14:22:00Z",
"namespace": "_semantic/preferences",
"tags": ["preference", "ui", "accessibility"],
"entities": [...],
"relationships": [...],
"temporal": {...},
"provenance": {...},
"embedding": {...},
"extensions": {...}
}
```
The projection always includes the OKF-legible mirror field `timestamp` (the value of `modified`, or `created` when there is no `modified`). When the source has a `summary`, it also includes `description` (mapped from `summary`). These are derived mirrors of the canonical frontmatter; markdown remains authoritative.
### Full Example
[Section titled “Full Example”](#full-example)
```json
{
"@context": [
"https://mif-spec.dev/schema/context.jsonld",
{
"prov": "http://www.w3.org/ns/prov#",
"subcog": "https://github.com/zircote/subcog/ns/"
}
],
"@type": ["Concept", "prov:Entity"],
"@id": "urn:mif:550e8400-e29b-41d4-a716-446655440000",
"content": "User prefers dark mode for all applications. This applies to:\n- IDE themes\n- Terminal colors\n- Web applications\n- Mobile apps",
"conceptType": "semantic",
"title": "Dark Mode Preference",
"created": "2026-01-15T10:30:00Z",
"modified": "2026-01-20T14:22:00Z",
"timestamp": "2026-01-20T14:22:00Z",
"ontology": {
"@type": "OntologyReference",
"id": "mif-base",
"version": "1.0.0"
},
"namespace": "_semantic/preferences",
"tags": ["preference", "ui", "accessibility"],
"aliases": ["Dark Mode Preference", "UI Theme Choice"],
"entities": [
{
"@type": "EntityReference",
"entity": {"@id": "urn:mif:entity:person:jane-doe"},
"role": "subject"
},
{
"@type": "EntityReference",
"entity": {"@id": "urn:mif:entity:concept:dark-mode"},
"role": "topic"
}
],
"relationships": [
{
"type": "relates-to",
"target": "urn:mif:memory:ui-preferences",
"strength": 0.85
},
{
"type": "supersedes",
"target": "urn:mif:memory:old-theme-preference"
}
],
"temporal": {
"@type": "TemporalMetadata",
"validFrom": "2026-01-15T00:00:00Z",
"validUntil": null,
"recordedAt": "2026-01-15T10:30:00Z",
"ttl": "P90D",
"decay": {
"model": "exponential",
"halfLife": "P7D",
"currentStrength": 0.85
},
"accessCount": 5,
"lastAccessed": "2026-01-20T14:22:00Z"
},
"provenance": {
"@type": "prov:Entity",
"sourceType": "user_explicit",
"prov:wasGeneratedBy": {
"@type": "prov:Activity",
"prov:wasAssociatedWith": {
"@id": "urn:mif:agent:claude-3-opus",
"@type": "prov:SoftwareAgent"
}
},
"prov:wasDerivedFrom": {
"@id": "urn:mif:conversation:conv-456"
},
"prov:wasAttributedTo": {
"@id": "urn:mif:entity:person:jane-doe"
},
"confidence": 0.95,
"trustLevel": "user_stated"
},
"embedding": {
"@type": "EmbeddingReference",
"model": "text-embedding-3-small",
"modelVersion": "2024-01",
"dimensions": 1536,
"sourceText": "User prefers dark mode for all applications",
"vectorUri": "urn:mif:vector:550e8400-e29b-41d4-a716-446655440000"
},
"citations": [
{
"@type": "Citation",
"citationType": "article",
"citationRole": "supports",
"title": "Dark Mode UI Benefits for Developer Productivity",
"url": "https://example.com/dark-mode-research",
"author": {
"@type": "EntityReference",
"entity": {"@id": "urn:mif:entity:person:jane-smith"},
"entityType": "Person",
"name": "Jane Smith"
},
"date": "2024-03-15",
"accessed": "2026-01-18",
"relevance": 0.92,
"note": "Research supporting dark mode preference for reduced eye strain"
}
],
"extensions": {
"subcog:domain": "user",
"subcog:hash": "sha256:4c04b32ddc2053b5..."
}
}
```
# Markdown Format
> The canonical .md format specification for human-readable concept files.
The `.md` file is the canonical representation of a MIF concept. Relationships are authoritative in frontmatter `relationships[]` and mirrored as OKF-legible markdown links in a `## Relationships` body section.
### Structure
[Section titled “Structure”](#structure)
```markdown
---
# YAML Frontmatter (required)
id: 550e8400-e29b-41d4-a716-446655440000 # UUID
type: semantic
created: 2026-01-15T10:30:00Z
relationships:
- type: relates-to
target: /semantic/other-concept.md
- type: derived-from
target: /episodic/source-incident.md
---
# Title (optional, first H1)
Concept content in Markdown format.
## Relationships (optional section, mirrors frontmatter)
- relates-to [Other Concept](/semantic/other-concept.md)
- derived-from [Source Incident](/episodic/source-incident.md)
## Entities (optional section)
- mentions @[[Person Name]]
- uses @[[Technology Name]]
```
### Frontmatter Schema
[Section titled “Frontmatter Schema”](#frontmatter-schema)
```yaml
---
# === REQUIRED ===
id: 550e8400-e29b-41d4-a716-446655440000 # UUID v4
type: semantic # Base type: semantic|episodic|procedural
created: 2026-01-15T10:30:00Z # ISO 8601 datetime
# === RECOMMENDED ===
modified: 2026-01-20T14:22:00Z # Last modification
ontology: # Applied ontology reference
id: mif-base # Ontology identifier
version: "1.0.0" # Ontology version
uri: https://mif-spec.dev/ontologies/mif-base # Ontology URI
namespace: org/user/project # Hierarchical scope
title: "Human-readable title" # Display title
tags: # Classification
- preference
- ui
# === OPTIONAL: Temporal ===
temporal:
validFrom: 2026-01-15T00:00:00Z # When fact becomes valid
validUntil: null # When fact expires (null = indefinite)
recordedAt: 2026-01-15T10:30:00Z # When recorded (transaction time)
ttl: P90D # Time-to-live (ISO 8601 duration)
decay:
model: exponential # Decay model
halfLife: P7D # Half-life duration
strength: 0.85 # Current strength (0-1)
accessCount: 5 # Times accessed
lastAccessed: 2026-01-20T14:22:00Z # Last access time
# === OPTIONAL: Provenance ===
provenance:
sourceType: user_explicit # How memory was created
sourceRef: conversation:conv_456 # Reference to source
agent: claude-3-opus # Creating agent
confidence: 0.95 # Confidence score (0-1)
trustLevel: user_stated # Trust classification
# === OPTIONAL: Embedding ===
embedding:
model: text-embedding-3-small # Embedding model
modelVersion: "2024-01" # Model version
dimensions: 1536 # Vector dimensions
sourceText: "User prefers dark mode" # Text that was embedded
# Note: Actual vectors stored externally via vectorUri
# === OPTIONAL: Aliases ===
aliases:
- "Dark Mode Preference"
- "UI Theme Choice"
# === OPTIONAL: Extensions ===
extensions:
subcog:
domain: user
hash: sha256:abc123...
custom_provider:
custom_field: value
---
```
### Relationship Syntax
[Section titled “Relationship Syntax”](#relationship-syntax)
Typed relationships are authoritative in frontmatter and mirrored in the body as standard bundle-relative markdown links, so a generic OKF consumer sees every edge. The body form is `- [Text](/path/target.md)`:
```markdown
## Relationships
- relates-to [Other Concept](/semantic/other-concept.md)
- derived-from [Source Incident](/episodic/source-incident.md)
- supersedes [Old Policy](/semantic/old-policy.md)
```
The corresponding frontmatter:
```yaml
relationships:
- type: relates-to
target: /semantic/other-concept.md
- type: derived-from
target: /episodic/source-incident.md
- type: supersedes
target: /semantic/old-policy.md
```
Every frontmatter `relationships` entry MUST have a corresponding body markdown link in the `## Relationships` section, and every such body link maps back to a frontmatter entry. Entity references use `@[[Name|Type]]` syntax (see Entity Types).
### Block References
[Section titled “Block References”](#block-references)
Blocks can be referenced for granular linking within a file:
```markdown
This is an important statement. ^important-point
- Key insight about the system ^insight-1
```
### Citations (Level 3)
[Section titled “Citations (Level 3)”](#citations-level-3)
Citations provide structured references to external sources that inform, support, or relate to the memory content. Citations are a Level 3 (Full) optional feature.
#### Frontmatter Schema
[Section titled “Frontmatter Schema”](#frontmatter-schema-1)
```yaml
# === OPTIONAL: Citations (Level 3) ===
citations:
- type: article # REQUIRED: Source category
title: "Memory Systems in AI Agents" # REQUIRED: Citation title
url: https://arxiv.org/abs/2024.12345 # REQUIRED: Valid URL
role: supports # REQUIRED: Relationship to memory
author: "@[[Jane Smith|Person]]" # OPTIONAL: Entity ref or text
date: 2024-06-15 # OPTIONAL: Publication date
accessed: 2026-01-20 # OPTIONAL: Access date
relevance: 0.95 # OPTIONAL: Relevance score (0-1)
note: "Foundational paper on semantic memory" # OPTIONAL: Annotation
```
#### Citation Fields
[Section titled “Citation Fields”](#citation-fields)
| Field | Required | Type | Description |
| ----------- | -------- | ------- | ------------------------------------------- |
| `type` | REQUIRED | Enum | Source category (see Citation Types) |
| `title` | REQUIRED | String | Citation title |
| `url` | REQUIRED | URI | Valid URL or URI |
| `role` | REQUIRED | Enum | Relationship to memory (see Citation Roles) |
| `author` | OPTIONAL | String | Entity reference or plain text |
| `date` | OPTIONAL | Date | Publication date (ISO 8601) |
| `accessed` | OPTIONAL | Date | Access date (ISO 8601) |
| `relevance` | OPTIONAL | Decimal | Relevance score (0.0-1.0) |
| `note` | OPTIONAL | String | Free-form annotation |
#### Citation Types
[Section titled “Citation Types”](#citation-types)
| Type | Description | Example |
| --------------- | -------------------------- | --------------------------------- |
| `article` | Journal article, blog post | arXiv paper, Medium article |
| `book` | Published book | O’Reilly book, academic text |
| `paper` | Conference/research paper | ACM paper, IEEE publication |
| `website` | General website | Documentation site, homepage |
| `documentation` | Technical documentation | API docs, user guides |
| `repository` | Code repository | GitHub repo, GitLab project |
| `video` | Video content | YouTube tutorial, conference talk |
| `podcast` | Podcast episode | Tech podcast, interview |
| `specification` | Technical specification | W3C spec, RFC document |
| `dataset` | Data source | Kaggle dataset, research data |
| `tool` | Software tool or service | SaaS product, CLI tool |
| `other` | Miscellaneous source | Catch-all category |
Custom types MAY use namespace prefixes: `acme:internal-memo`, `research:lab-notes`
#### Citation Roles
[Section titled “Citation Roles”](#citation-roles)
| Role | Description | Use Case |
| ------------- | ---------------------------- | ------------------------------ |
| `supports` | Provides supporting evidence | Confirming research, alignment |
| `refutes` | Contradicts or disputes | Opposing viewpoint, correction |
| `background` | General context/reference | Related reading, foundation |
| `methodology` | Method or approach source | Technique borrowed, framework |
| `contradicts` | Conflicts with claims | Disagreement, alternative view |
| `extends` | Builds upon cited work | Evolution, expansion |
| `derived` | Direct derivation source | Adapted from, based on |
| `source` | Primary source material | Original data, quote |
| `example` | Illustrative example | Case study, demo |
| `review` | Critical review/analysis | Critique, evaluation |
Custom roles MAY use namespace prefixes: `research:replicates`, `legal:cites-precedent`
#### Body Section Syntax
[Section titled “Body Section Syntax”](#body-section-syntax)
An optional `## Citations` section MAY appear in the memory body for detailed annotations. When present, corresponding entries MUST exist in frontmatter.
```markdown
## Citations
- [Memory Systems in AI Agents](https://arxiv.org/abs/2024.12345) by @[[Jane Smith|Person]] (2024)
- **Type**: article
- **Role**: supports
- **Relevance**: 0.95
- Foundational paper on semantic memory structures. Introduces bi-temporal
model that informed MIF's temporal design.
- [Obsidian Help](https://help.obsidian.md/) by @[[Obsidian Team|Organization]]
- **Type**: documentation
- **Role**: background
- **Accessed**: 2026-01-18
- Reference for wiki-link syntax and block references.
```
#### Author Entity References
[Section titled “Author Entity References”](#author-entity-references)
Authors MAY use wiki-link syntax to reference MIF entities:
```yaml
# Single author entity
author: "@[[Jane Smith|Person]]"
# Multiple authors (comma-separated)
author: "@[[Jane Smith|Person]], @[[John Doe|Person]]"
# Organization author
author: "@[[Anthropic|Organization]]"
# Plain text (no entity reference)
author: "Jane Smith et al."
```
#### Citation Validation
[Section titled “Citation Validation”](#citation-validation)
Implementations SHOULD validate citations according to these rules:
**Required Field Constraints:**
| Field | Constraint |
| ------- | ----------------------------------------------------------------------------------------- |
| `type` | MUST be a value from Citation Types or a custom namespaced type (e.g., `acme:memo`) |
| `title` | MUST be a non-empty string |
| `url` | MUST be a valid URI (http, https, or custom schemes) |
| `role` | MUST be a value from Citation Roles or a custom namespaced role (e.g., `legal:precedent`) |
**Optional Field Constraints:**
| Field | Constraint |
| ----------- | ----------------------------------------------------------------------------------------------- |
| `author` | SHOULD be entity reference(s) `@[[Name\|Type]]` or plain text; multiple authors comma-separated |
| `date` | MUST be ISO 8601 date format (`YYYY-MM-DD`) |
| `accessed` | MUST be ISO 8601 date format (`YYYY-MM-DD`) |
| `relevance` | MUST be decimal between 0.0 and 1.0 inclusive |
| `note` | SHOULD be under 1000 characters; longer notes SHOULD use body section |
**Validation Errors:**
| Error | Severity | Action |
| ------------------------ | -------- | ----------------------------------------- |
| Missing required field | Error | Reject citation |
| Invalid `type` value | Warning | Accept with `type: "other"` fallback |
| Invalid `role` value | Warning | Accept with `role: "background"` fallback |
| Malformed URL | Error | Reject citation |
| `relevance` out of range | Warning | Clamp to 0.0-1.0 |
| Invalid date format | Warning | Accept as plain text |
### Compression (Level 3)
[Section titled “Compression (Level 3)”](#compression-level-3)
Compression allows large memories to be summarized while preserving the original content. Compression is typically applied by garbage collection processes to reduce memory footprint while retaining semantic value.
#### Compression Fields
[Section titled “Compression Fields”](#compression-fields)
| Field | Required | Type | Description |
| -------------- | -------- | -------- | ------------------------------------------------- |
| `summary` | OPTIONAL | String | Concise 2-3 sentence summary (max 500 characters) |
| `compressedAt` | OPTIONAL | DateTime | When compression was applied (ISO 8601) |
**Frontmatter Schema:**
```yaml
# === OPTIONAL: Compression (Level 3) ===
summary: "User prefers dark mode for reduced eye strain during extended coding sessions. Applies to IDE, terminal, and web applications."
compressedAt: 2026-01-24T10:00:00Z
```
#### Compression Criteria
[Section titled “Compression Criteria”](#compression-criteria)
Implementations MAY apply compression when memories meet these criteria:
| Condition | Threshold |
| -------------- | -------------------------------------- |
| Age AND Size | Age > 30 days AND content > 100 lines |
| Decay AND Size | Strength < 0.3 AND content > 100 lines |
#### Compression Behavior
[Section titled “Compression Behavior”](#compression-behavior)
* The `content` field SHOULD be replaced with the compressed summary
* The original `content` MAY be preserved in `extensions.original_content`
* The `summary` field contains the generated summary text
* The `compressedAt` timestamp indicates when compression occurred
* Compressed memories retain all other metadata (relationships, entities, etc.)
#### Compression Validation
[Section titled “Compression Validation”](#compression-validation)
| Field | Constraint |
| -------------- | -------------------------------- |
| `summary` | MUST be 500 characters or fewer |
| `compressedAt` | MUST be ISO 8601 datetime format |
# Namespace Model
> Namespace hierarchy, reserved prefixes, and organizational patterns for concepts.
### Namespace Structure
[Section titled “Namespace Structure”](#namespace-structure)
Namespaces use a flexible scoping model with reserved prefixes for cross-organization sharing:
```plaintext
{root}/{scope}+[/{session}]
```
Where `{root}` is either:
* **Organization name** - private to that organization
* **Reserved prefix** - special namespace with defined semantics
### Reserved Namespace Prefixes
[Section titled “Reserved Namespace Prefixes”](#reserved-namespace-prefixes)
Names beginning with underscore (`_`) are reserved for special namespaces:
| Prefix | Visibility | Description |
| --------- | -------------- | --------------------------------------------------- |
| `_public` | Global | Publicly accessible by anyone |
| `_shared` | Negotiated | Cross-organization sharing with explicit agreements |
| `_local` | Local only | Never synchronized or exported |
| `_system` | Implementation | Reserved for system/implementation use |
**Examples:**
```plaintext
# Public knowledge (globally accessible)
_public/python/async-patterns
_public/react/hooks-best-practices
_public/security/owasp-top-10
# Shared between organizations (requires agreement)
_shared/cncf/kubernetes/patterns # CNCF member consortium
_shared/acme+bigcorp/integration-api # Bilateral agreement
_shared/industry-healthcare/hipaa-compliance
# Organization-private (default)
acme-corp/jane-doe/preferences
acme-corp/project-x/architecture-decisions
acme-corp/team-frontend/patterns
```
### Flexible Scopes Within Organizations
[Section titled “Flexible Scopes Within Organizations”](#flexible-scopes-within-organizations)
Within an organization, scopes are **peer-level** - users, projects, teams, and other organizational units are treated equally:
```plaintext
{organization}/{scope}+
Examples:
- acme-corp/jane-doe # user scope
- acme-corp/project-x # project scope
- acme-corp/team-frontend # team scope
- acme-corp/jane-doe/project-x # user + project (order flexible)
- acme-corp/project-x/jane-doe # same as above
- acme-corp/team-frontend/project-x # team + project
```
**Key principle:** Within an organization, there is no enforced hierarchy between users, projects, or teams. The path segments represent scope intersection, not parent-child relationships.
### Shared Namespace Agreements
[Section titled “Shared Namespace Agreements”](#shared-namespace-agreements)
The `_shared` prefix requires explicit agreements between organizations:
.mif/shared-agreements/acme+bigcorp.yaml
```yaml
id: acme+bigcorp
type: bilateral
parties:
- acme-corp
- bigcorp-inc
created: 2026-01-15T00:00:00Z
namespaces:
- _shared/acme+bigcorp/integration-api
- _shared/acme+bigcorp/data-formats
access:
read: [acme-corp, bigcorp-inc]
write: [acme-corp, bigcorp-inc]
```
For consortiums or communities:
.mif/shared-agreements/cncf.yaml
```yaml
id: cncf
type: consortium
admin: cncf-foundation
members:
- google
- microsoft
- redhat
# ... (member list or reference)
namespaces:
- _shared/cncf/*
access:
read: members
write: approved-contributors
```
### Custom Reserved Prefixes
[Section titled “Custom Reserved Prefixes”](#custom-reserved-prefixes)
Implementations MAY define additional reserved prefixes following the underscore convention:
.mif/config.yaml
```yaml
reserved_prefixes:
_archive:
description: Archived memories (read-only)
access: read-only
_experimental:
description: Experimental/unstable memories
ttl: P30D
_imported:
description: Memories imported from external systems
provenance_required: true
```
### Namespace URIs
[Section titled “Namespace URIs”](#namespace-uris)
Full URI form for cross-system references:
```plaintext
mif://{domain}/{namespace}/{memory-id}
```
Examples:
* `mif://github.com/modeled-information-format/acme-corp/project-x/550e8400...`
* `mif://registry/_public/python/async-patterns/abc123...`
* `mif://local/_local/scratch/memory-123`
### Namespace Inheritance
[Section titled “Namespace Inheritance”](#namespace-inheritance)
Child namespaces MAY inherit properties from parents:
.mif/namespaces/acme-corp.yaml
```yaml
id: acme-corp
type: organization
default_ttl: P365D
default_visibility: private
# .mif/namespaces/acme-corp/project-x.yaml
id: project-x
parent: acme-corp
default_tags: [project-x]
# Inherits default_ttl and default_visibility from parent
```
### Ontology Definition
[Section titled “Ontology Definition”](#ontology-definition)
Ontologies define namespace hierarchies, entity types, and discovery patterns. They enable domain-specific customization while maintaining MIF compatibility.
#### Ontology Files
[Section titled “Ontology Files”](#ontology-files)
Ontologies are defined in YAML files with optional JSON-LD export:
```plaintext
.mif/ontologies/
├── mif-base.ontology.yaml # Base ontology (semantic/episodic/procedural)
├── mif-base.ontology.jsonld # JSON-LD export for semantic web
└── domain/
└── software-engineering.ontology.yaml
```
#### Base Type Hierarchy
[Section titled “Base Type Hierarchy”](#base-type-hierarchy)
The base ontology uses a three-tier hierarchy based on the base knowledge types:
```yaml
namespaces:
semantic: # Facts, concepts, relationships
type_hint: semantic
children:
decisions: {}
knowledge: {}
entities: {}
episodic: # Events, experiences, timelines
type_hint: episodic
children:
incidents: {}
sessions: {}
blockers: {}
procedural: # Step-by-step processes
type_hint: procedural
children:
runbooks: {}
patterns: {}
migrations: {}
```
#### Entity Type Definition
[Section titled “Entity Type Definition”](#entity-type-definition)
Entity types define structured data with traits and JSON Schema:
```yaml
entity_types:
- name: component
base: semantic
traits: [versioned, documented]
schema:
required: [name, responsibility]
properties:
name: { type: string }
responsibility: { type: string }
dependencies: { type: array, items: { type: string } }
```
#### Discovery Patterns
[Section titled “Discovery Patterns”](#discovery-patterns)
Ontologies can define patterns for suggesting entity types:
```yaml
discovery:
enabled: true
confidence_threshold: 0.8
patterns:
- content_pattern: "\\b(PostgreSQL|MySQL|MongoDB)\\b"
suggest_entity: technology
suggest_namespace: _semantic/entities
- file_pattern: "**/services/**/*.py"
suggest_entity: component
suggest_namespace: _semantic/components
```
#### Ontology Resolution
[Section titled “Ontology Resolution”](#ontology-resolution)
Ontologies are loaded from multiple sources with precedence:
1. MIF base ontology (built-in)
2. User ontology (`~/.claude/mnemonic/ontology.yaml`)
3. Project ontology (`./.claude/mnemonic/ontology.yaml`)
Later sources can extend or override earlier definitions.
#### Trait Inheritance and Conflict Resolution
[Section titled “Trait Inheritance and Conflict Resolution”](#trait-inheritance-and-conflict-resolution)
Traits support inheritance via the `extends` field, enabling composition:
```yaml
traits:
timestamped:
fields:
created: { type: string, format: date-time }
modified: { type: string, format: date-time }
auditable:
extends: [timestamped]
fields:
audit_log: { type: array }
last_audited: { type: string, format: date-time }
lifecycle:
extends: [timestamped]
fields:
status: { type: string, enum: [draft, active, archived] }
```
**Conflict Resolution Strategy:**
When multiple traits define the same field (e.g., both `auditable` and `lifecycle` inherit `created` from `timestamped`), implementations MUST apply the following resolution rules:
| Scenario | Resolution | Rationale |
| ------------------------------------------------- | ------------------------------ | ------------------------------------------------- |
| Same field inherited via different paths | Use shared ancestor definition | Diamond inheritance resolved to common base |
| Same field defined in multiple independent traits | Error at composition time | Ambiguous definition requires explicit resolution |
| Field in trait overrides inherited field | Child definition wins | Explicit override is intentional |
| Field in entity overrides trait field | Entity definition wins | Most specific wins |
**Example - Diamond Inheritance:**
```yaml
# Both auditable and lifecycle inherit timestamped
entity_types:
- name: document
traits: [auditable, lifecycle] # No conflict: `created` from shared `timestamped`
```
**Example - Conflict Requiring Resolution:**
```yaml
traits:
trait_a:
fields:
status: { type: string, enum: [open, closed] }
trait_b:
fields:
status: { type: string, enum: [draft, published] }
entity_types:
- name: conflicting_entity
traits: [trait_a, trait_b]
# ERROR: `status` defined differently in both traits
# Resolution: Override explicitly in entity schema
schema:
properties:
status: { type: string, enum: [draft, open, published, closed] }
```
**Implementation Guidance:**
1. **Validation**: Implementations SHOULD detect conflicts at ontology load time
2. **Error Messages**: Include both conflicting definitions and their sources
3. **Explicit Override**: When conflicts exist, entity-level schema takes precedence
4. **Documentation**: Ontology authors SHOULD document intentional overrides
# Overview
> Abstract, terminology, and design principles of the Modeled Information Format.
## Abstract
[Section titled “Abstract”](#abstract)
MIF (Modeled Information Format) is an opinionated, OKF-compliant content model for agent-readable knowledge. The Open Knowledge Format (OKF) defines a minimal interoperability surface — a directory of `.md` concept files with YAML frontmatter, one required `type` field, and a concept graph of standard markdown links — and deliberately refuses to define a content model. MIF fills that envelope: it supplies a concrete type system, typed relationships, provenance/trust tiers, and validity/freshness semantics.
Markdown is the canonical representation; JSON-LD is a derived, regenerable projection. AI memory is the first domain profile of MIF, not its identity (see [`profiles/ai-memory/`](https://github.com/modeled-information-format/MIF/tree/main/profiles/ai-memory)).
OKF compliance is achieved as a **superset, not by subordination**: every MIF bundle validates as a conformant OKF bundle, but MIF remains an independent specification with its own identity model and governance, pinned to OKF v0.1.
MIF is designed to be:
* **OKF-compliant**: every bundle is a valid OKF bundle (a tested invariant)
* **Markdown-canonical**: the `.md` file is the source of truth; JSON-LD is a derived projection
* **Human-Readable**: valid Obsidian-compatible notes that work in any Markdown editor
* **Machine-Processable**: JSON-LD with semantic web compatibility
* **Extensible**: domain profiles extend the base without breaking compatibility
***
## Terminology
[Section titled “Terminology”](#terminology)
The key words “MUST”, “MUST NOT”, “REQUIRED”, “SHALL”, “SHALL NOT”, “SHOULD”, “SHOULD NOT”, “RECOMMENDED”, “MAY”, and “OPTIONAL” in this document are to be interpreted as described in [RFC 2119](https://www.rfc-editor.org/rfc/rfc2119).
### Definitions
[Section titled “Definitions”](#definitions)
* **Concept**: A discrete unit of knowledge — a single `.md` file in a bundle, including its content, metadata, relationships, and provenance. The atomic element of MIF.
* **Bundle**: A directory tree of `.md` concept files; a valid OKF bundle.
* **Entity**: A named thing (person, organization, technology, concept, or file) that can participate in relationships.
* **Relationship**: A typed, directed connection between two concepts, or between a concept and an entity.
* **Namespace**: A hierarchical scope for organizing concepts (e.g., `org/user/project/session`).
* **Vault**: A collection of MIF files, analogous to an Obsidian vault.
* **Provider**: An implementation that can import or export MIF format.
***
## Design Principles
[Section titled “Design Principles”](#design-principles)
### Dual Representation
[Section titled “Dual Representation”](#dual-representation)
MIF defines two representations, with markdown as the canonical source:
1. **Markdown Format** (`.md`): Canonical, human-readable, Obsidian-compatible
2. **JSON-LD Format** (`.jsonld`): Derived, machine-processable, semantically linked
The `.md` file is the source of truth; the JSON-LD form is a derived projection, regenerable from markdown with `scripts/mif_convert.py`. The round trip MUST be lossless. A conforming implementation MAY support either or both formats; if the two disagree, markdown wins.
### Obsidian Compatibility
[Section titled “Obsidian Compatibility”](#obsidian-compatibility)
The Markdown format is valid Obsidian-compatible notes, so files work in Obsidian vaults while remaining readable in any text editor or Markdown processor. Concept relationships are expressed as standard bundle-relative markdown links (so a generic OKF consumer sees every edge); Obsidian’s bidirectional features remain available for authoring.
**Required Markdown Features:**
* **YAML Frontmatter**: Structured metadata at the top of files, enclosed in `---` delimiters. Obsidian’s Properties panel reads and writes this data, supporting typed fields (text, number, date, checkbox, list).
* **Standard Markdown Links**: Concept-graph edges use bundle-relative markdown links, `[text](/path/to/target.md)`, in a `## Relationships` section — the OKF-legible representation of relationships.
* **Block References**: Unique identifiers (`^block-id`) attached to paragraphs, list items, or other blocks enable granular linking and transclusion within a file.
* **Aliases**: The `aliases` frontmatter property allows notes to be found and linked using alternative names, improving discoverability.
* **Tags**: Both inline `#tags` and frontmatter `tags: [a, b]` are supported, with hierarchical tags using forward slashes (`#category/subcategory`).
* **Standard Markdown**: All content uses CommonMark-compatible Markdown, ensuring portability to other tools and platforms.
**Optional Obsidian Extensions:**
* **Callouts**: Admonition blocks using `> [!type]` syntax for notes, warnings, tips, etc.
* **Embeds**: Transclusion using `![[Note]]` to embed content from other files
* **Dataview Queries**: Compatible with Dataview plugin for vault-as-database queries
### Semantic Web Compatibility
[Section titled “Semantic Web Compatibility”](#semantic-web-compatibility)
The JSON-LD format MUST be valid JSON-LD 1.1:
* Use `@context` for vocabulary mapping
* Use `@id` for unique identifiers
* Use `@type` for entity classification
* Compatible with RDF tooling
### Local-First
[Section titled “Local-First”](#local-first)
MIF is designed for local-first storage:
* No required network dependencies
* Files can be read with any text editor
* No proprietary database required
* Full user data ownership
# Provenance
> W3C PROV-based provenance tracking for memory origins.
MIF uses W3C PROV vocabulary for provenance tracking.
### Source Types
[Section titled “Source Types”](#source-types)
| Type | Description | Confidence Range |
| ------------------ | -------------------------- | ---------------- |
| `user_explicit` | User directly stated | 0.90 - 1.00 |
| `user_implicit` | Inferred from user actions | 0.70 - 0.89 |
| `agent_inferred` | AI reasoning from context | 0.50 - 0.69 |
| `external_import` | From external data source | 0.30 - 0.70 |
| `system_generated` | Automatically generated | 0.20 - 0.50 |
### Trust Levels
[Section titled “Trust Levels”](#trust-levels)
| Level | Description |
| --------------------- | ----------------------------- |
| `verified` | Confirmed by multiple sources |
| `user_stated` | User explicitly provided |
| `high_confidence` | Strong inference |
| `moderate_confidence` | Reasonable inference |
| `low_confidence` | Weak inference |
| `uncertain` | Unverified |
### Provenance Schema
[Section titled “Provenance Schema”](#provenance-schema)
```yaml
provenance:
sourceType: user_explicit
sourceRef: conversation:conv-456
agent: claude-3-opus
agentVersion: "20240229"
confidence: 0.95
trustLevel: user_stated
wasDerivedFrom:
- memory:parent-memory-id
wasAttributedTo: entity:person:jane-doe
```
# Relationship Types
> The nine core relationship types for connecting concepts.
MIF provides an **extensible relationship type system**. Implementations SHOULD support the core types for interoperability, but MAY define custom relationship types for domain-specific needs.
### Relationship Type Architecture
[Section titled “Relationship Type Architecture”](#relationship-type-architecture)
Relationship types are **not hard-coded**. They are defined in vault configuration and can be extended per-project:
.mif/config.yaml
```yaml
relationship_types:
# Core types (RECOMMENDED for interoperability)
- name: relates-to
description: General semantic relationship
symmetric: true
- name: derived-from
description: Memory created based on source
inverse: derives
- name: supersedes
description: Replaces an older memory
inverse: superseded-by
- name: conflicts-with
description: Contradicts another memory
symmetric: true
- name: part-of
description: Component of a larger whole
inverse: contains
- name: implements
description: Realizes a concept or pattern
inverse: implemented-by
- name: uses
description: Utilizes a technology or tool
inverse: used-by
- name: created-by
description: Authored by an entity
inverse: creates
- name: mentioned-in
description: Referenced within a memory
inverse: mentions
# Custom types (domain-specific)
- name: reinforces
namespace: subcog
description: Strengthens confidence in another memory
inverse: reinforced-by
- name: contradicts
namespace: subcog
description: Provides evidence against another memory
inverse: contradicted-by
- name: breeds-with
namespace: farm
description: Animal breeding relationship
symmetric: false
properties:
- name: breeding_date
type: date
- name: success
type: boolean
```
### Core Relationship Types (Recommended)
[Section titled “Core Relationship Types (Recommended)”](#core-relationship-types-recommended)
For maximum interoperability, implementations SHOULD recognize these nine core types:
| Type | Description | Inverse | Symmetric |
| ---------------- | -------------------------- | ---------------- | --------- |
| `relates-to` | General relationship | `relates-to` | Yes |
| `derived-from` | Created based on source | `derives` | No |
| `supersedes` | Replaces older memory | `superseded-by` | No |
| `conflicts-with` | Contradicts another memory | `conflicts-with` | Yes |
| `part-of` | Component of larger whole | `contains` | No |
| `implements` | Realizes a concept/pattern | `implemented-by` | No |
| `uses` | Utilizes a technology/tool | `used-by` | No |
| `created-by` | Authored by entity | `creates` | No |
| `mentioned-in` | Referenced in memory | `mentions` | No |
### Custom Relationship Types
[Section titled “Custom Relationship Types”](#custom-relationship-types)
Providers MAY define additional relationship types using namespaced URIs:
```yaml
# Custom relationship type definition
relationship_types:
- name: contradicts
namespace: farm # Results in type token: farm:contradicts
description: Provides conflicting evidence
inverse: contradicted-by
properties:
- name: contradiction_type
type: string
enum: [direct, indirect, partial]
- name: severity
type: decimal
range: [0.0, 1.0]
```
**JSON-LD representation of custom relationship types:**
```json
{
"@context": [
"https://mif-spec.dev/schema/context.jsonld",
{"farm": "https://example.org/farm/"}
],
"relationships": [
{
"type": "farm:breeds-with",
"target": "urn:mif:entity:animal:ram-001",
"strength": 1.0,
"metadata": {
"farm:breeding_date": "2025-10-15",
"farm:success": true
}
}
]
}
```
### Relationship Schema
[Section titled “Relationship Schema”](#relationship-schema)
**Markdown syntax:**
Relationships are authoritative in frontmatter `relationships[]` and mirrored as OKF-legible markdown links in a dedicated body section, using the form `- [Text](/path/target.md)`:
```markdown
## Relationships
- relates-to [Other Concept](/semantic/other-concept.md)
- derived-from [Source Concept](/episodic/source-concept.md)
- supersedes [Old Concept](/semantic/old-concept.md)
- conflicts-with [Contradicting Concept](/semantic/contradicting-concept.md)
- part-of [Parent Concept](/semantic/parent-concept.md)
```
The relationship type name is converted to kebab-case in Markdown. The link target is a bundle-relative path to the target concept’s `.md` file, so a generic OKF consumer sees every edge. The matching frontmatter (one entry per body link):
```yaml
relationships:
- type: relates-to
target: /semantic/other-concept.md
- type: derived-from
target: /episodic/source-concept.md
- type: supersedes
target: /semantic/old-concept.md
- type: conflicts-with
target: /semantic/contradicting-concept.md
- type: part-of
target: /semantic/parent-concept.md
```
**JSON-LD schema:**
```json
"relationships": [
{
"type": "derived-from",
"target": "urn:mif:memory:source-memory",
"strength": 0.9,
"metadata": {
"reason": "Extracted key insight",
"extractedAt": "2026-01-15T10:30:00Z"
}
}
]
```
### Relationship Properties
[Section titled “Relationship Properties”](#relationship-properties)
| Property | Type | Required | Description |
| ---------- | ------- | -------- | ----------------------------------------------------- |
| `type` | String | Yes | Relationship type in kebab-case (e.g. `derived-from`) |
| `target` | String | Yes | Target memory or entity path/URN |
| `strength` | Decimal | No | Relationship strength (0.0-1.0) |
| `metadata` | Object | No | Additional relationship metadata |
# Security
> Security considerations and IANA media type registrations.
## Security Considerations
[Section titled “Security Considerations”](#security-considerations)
### Data Privacy
[Section titled “Data Privacy”](#data-privacy)
* MIF files MAY contain sensitive personal information
* Implementations SHOULD support encryption at rest
* Namespace isolation SHOULD be enforced
* Export functions MUST respect access controls
### Integrity
[Section titled “Integrity”](#integrity)
* Implementations SHOULD compute content hashes
* The `extensions.hash` field MAY store integrity hashes
* Import functions SHOULD verify integrity when hashes present
### Provenance Trust
[Section titled “Provenance Trust”](#provenance-trust)
* `provenance.trustLevel` indicates data reliability
* Implementations SHOULD NOT elevate trust levels on import
* External sources SHOULD be marked as `external_import`
***
## IANA Considerations
[Section titled “IANA Considerations”](#iana-considerations)
### Media Type Registration
[Section titled “Media Type Registration”](#media-type-registration)
**Markdown Format:**
* Type name: text
* Subtype name: markdown
* Required parameters: variant=mif
* Optional parameters: version
**JSON-LD Format:**
* Type name: application
* Subtype name: ld+json
* Required parameters: profile=“”
### URI Scheme
[Section titled “URI Scheme”](#uri-scheme)
MIF URIs use the `mif:` scheme:
```plaintext
mif://{authority}/{namespace}/{memory-id}
```
# Temporal Model
> Validity windows and freshness — bi-temporal tracking and decay models.
MIF’s temporal model answers OKF’s open “live vs. stale” question with **validity windows and freshness**. It uses a bi-temporal model distinguishing between:
1. **Transaction Time**: When the concept was recorded in the system
2. **Valid Time**: When the fact represented by the concept is true
### Temporal Properties
[Section titled “Temporal Properties”](#temporal-properties)
| Property | Type | Description |
| -------------- | -------- | ------------------------------------- |
| `validFrom` | DateTime | When fact becomes valid |
| `validUntil` | DateTime | When fact expires (null = indefinite) |
| `recordedAt` | DateTime | When recorded (transaction time) |
| `ttl` | Duration | Time-to-live (ISO 8601 duration) |
| `decay` | Object | Decay model parameters |
| `accessCount` | Integer | Times accessed |
| `lastAccessed` | DateTime | Last access time |
### Decay Models
[Section titled “Decay Models”](#decay-models)
| Model | Formula | Use Case |
| ------------- | ------------------------------ | ----------------------- |
| `none` | No decay | Permanent concepts |
| `linear` | strength = 1 - (t / ttl) | Simple linear decay |
| `exponential` | strength = e^(-t/halfLife) | Gradual freshness decay |
| `step` | strength = 1 if t < ttl else 0 | Hard expiration |
### Freshness Rationale
[Section titled “Freshness Rationale”](#freshness-rationale)
In the core model, the temporal decay function expresses **freshness** — how current a piece of knowledge is — and answers OKF’s open “live vs. stale” question. The decay half-life defaults (P7D, P14D, P30D) are **pragmatic defaults** for how quickly knowledge of a given kind loses currency; they are not prescriptive.
The `strength = e^(-t/halfLife)` curve models a value that is fully current when recorded and decays gradually toward stale, with `validFrom`/`validUntil` windows bounding the interval in which a fact is asserted to hold.
#### Half-Life Defaults
[Section titled “Half-Life Defaults”](#half-life-defaults)
| Half-Life | Use Case | Rationale |
| --------- | -------------------- | ----------------------------------------------------- |
| **P7D** | Short-term context | Aligns with weekly work cycles |
| **P14D** | Medium-term projects | Spans typical sprint/iteration boundaries |
| **P30D** | Long-term knowledge | Corresponds to monthly review cycles |
| **P90D** | Default TTL | Quarterly relevance for most organizational knowledge |
Implementations SHOULD tune these based on:
* Knowledge kind (`episodic` records go stale faster than `semantic` facts)
* Organizational context (high-velocity vs. stable environments)
* Access patterns (frequently accessed knowledge can reinforce slower decay)
The `lastAccessed` and `accessCount` fields let implementations model reinforcement — each access can reset or slow the freshness decay.
The cognitive-memory rationale that originally motivated this exponential curve — including the underlying experimental references and decay tuning for retrieval-oriented systems — lives in the AI Memory profile (`profiles/ai-memory/`), keeping the core framed purely as freshness.
### Example
[Section titled “Example”](#example)
```yaml
temporal:
validFrom: 2026-01-15T00:00:00Z
validUntil: null
recordedAt: 2026-01-15T10:30:00Z
ttl: P90D
decay:
model: exponential
halfLife: P7D
strength: 0.85
lastReinforced: 2026-01-18T09:00:00Z
accessCount: 5
lastAccessed: 2026-01-20T14:22:00Z
```