Extensions
The core holds what every organization has. Everything else a system
keeps (a CRM’s pipelines and deals, a data platform’s notebooks and
wikis, an ERP’s invoices, a BI tool’s dashboards) travels as an
extension: a folder under extensions/, named after the system’s
namespace.
- POF.md
- EXTENSION.md
- COMMITS.md
- EXTENSION.md
Anyone can write an extension, for any system, without asking the spec:
extensions/tango/ for an ERP, extensions/powerbi/ for dashboards.
EXTENSION.md
Every extension starts with its manifest:
---
type: Extension
name: hub
system: nicetry hub
format: hub-export/1
spec: https://hub-a29r.onrender.com/llms.txt
---
Los datos de hub de Casa Norte, como los exporta el engine.| Field | Required | Notes |
|---|---|---|
type | Yes | Always Extension. |
name | Yes | The namespace, the same as the folder. It is listed in the bundle’s manifest under extensions. |
system | Yes | The system that produced it. |
format | Yes | The format of its contents, as that system names it (hub-export/1). |
spec | No | A link to the documentation of that format. |
Inside an extension
An extension follows the same rules as the core: Markdown with YAML
frontmatter, type always present, empty fields left out, identity by
folder, relations as paths, access state left out. Beyond that, its
layout is its system’s.
Its types carry its namespace, so a document says which system it belongs to wherever it ends up:
---
type: data.notebook
title: Dirección
tags:
- direccion
created_at: 2026-10-15T15:57:21.575Z
updated_at: 2026-10-15T15:57:21.575Z
---
Las notas de la reunión de dirección de los lunes: riesgo, dato y decisión.A type without a dot is a core type; a type with one (hub.deal,
data.Artifact, loops.Run) belongs to the extension named before the
dot. An extension can describe its own types (their fields, what each
one means) in documents of its own, so that a reader understands them
without knowing the system. An extension can carry binary files too.
References
Inside an extension, paths are relative to its folder. To point outside
it, at the core or at another extension, an extension writes a path from
the root of the bundle with a leading /: /roles/mayorista/atencion,
/extensions/data/artifacts/stock. The core points into an extension
through its folder, extensions/<system>/…. A reader resolves a path
that starts with / against the root of the bundle. See
Paths across the bundle.
History
An extension can keep its own history (its COMMITS.md and
HISTORY.md), with the same shape as the core’s.
Readers keep what they do not know. A reader that does not know an extension keeps it intact: it neither drops it nor rewrites it. An importer takes the core and the extensions it knows how to read, and leaves the rest as it found it.