eidosmd 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (95) hide show
  1. package/LICENSE +133 -0
  2. package/NOTICE +15 -0
  3. package/README.md +146 -0
  4. package/browser/index.html +268 -0
  5. package/dist/src/cli.js +5 -0
  6. package/dist/src/commands/agents.js +47 -0
  7. package/dist/src/commands/browser.js +40 -0
  8. package/dist/src/commands/check.js +61 -0
  9. package/dist/src/commands/convert.js +30 -0
  10. package/dist/src/commands/framework.js +76 -0
  11. package/dist/src/commands/index.js +64 -0
  12. package/dist/src/commands/init.js +66 -0
  13. package/dist/src/commands/instructions.js +40 -0
  14. package/dist/src/commands/list.js +73 -0
  15. package/dist/src/commands/new.js +68 -0
  16. package/dist/src/commands/seeds.js +40 -0
  17. package/dist/src/commands/show.js +24 -0
  18. package/dist/src/commands/whoami.js +84 -0
  19. package/dist/src/context.js +35 -0
  20. package/dist/src/core/blueprint.js +129 -0
  21. package/dist/src/core/check.js +407 -0
  22. package/dist/src/core/convert.js +37 -0
  23. package/dist/src/core/framework-markdown.js +233 -0
  24. package/dist/src/core/framework-model.js +48 -0
  25. package/dist/src/core/framework-structured.js +334 -0
  26. package/dist/src/core/framework.js +56 -0
  27. package/dist/src/core/frontmatter.js +116 -0
  28. package/dist/src/core/index-leaf.js +83 -0
  29. package/dist/src/core/markdown.js +100 -0
  30. package/dist/src/core/me.js +89 -0
  31. package/dist/src/core/naming.js +46 -0
  32. package/dist/src/core/root.js +88 -0
  33. package/dist/src/core/scaffold.js +118 -0
  34. package/dist/src/core/seed.js +223 -0
  35. package/dist/src/core/server.js +275 -0
  36. package/dist/src/core/shape.js +26 -0
  37. package/dist/src/output.js +38 -0
  38. package/dist/src/paths.js +28 -0
  39. package/dist/src/program.js +242 -0
  40. package/instructions/authoring.md +50 -0
  41. package/instructions/configuring.md +65 -0
  42. package/instructions/init-required.md +32 -0
  43. package/instructions/overview.md +37 -0
  44. package/instructions/validating.md +33 -0
  45. package/package.json +53 -0
  46. package/standard/EIDOS.md +324 -0
  47. package/standard/seeds/README.md +25 -0
  48. package/standard/seeds/book/Framework.md +87 -0
  49. package/standard/seeds/book/README.md +22 -0
  50. package/standard/seeds/book/_gitignore +4 -0
  51. package/standard/seeds/book/me.md +18 -0
  52. package/standard/seeds/book/roles/README.md +12 -0
  53. package/standard/seeds/book/roles/collaborator.md +16 -0
  54. package/standard/seeds/book/roles/editor.md +16 -0
  55. package/standard/seeds/book/roles/framework-owner.md +16 -0
  56. package/standard/seeds/book/roles/reader.md +16 -0
  57. package/standard/seeds/book/shapes/chapter.full.md +45 -0
  58. package/standard/seeds/book/shapes/chapter.sketch.md +26 -0
  59. package/standard/seeds/book/shapes/frame.market.md +23 -0
  60. package/standard/seeds/book/shapes/frame.premise.md +24 -0
  61. package/standard/seeds/book/shapes/frame.reader.md +23 -0
  62. package/standard/seeds/book/shapes/frame.voice.md +24 -0
  63. package/standard/seeds/research/Framework.md +88 -0
  64. package/standard/seeds/research/README.md +23 -0
  65. package/standard/seeds/research/_gitignore +4 -0
  66. package/standard/seeds/research/me.md +18 -0
  67. package/standard/seeds/research/roles/README.md +12 -0
  68. package/standard/seeds/research/roles/framework-owner.md +16 -0
  69. package/standard/seeds/research/roles/researcher.md +16 -0
  70. package/standard/seeds/research/roles/reviewer.md +16 -0
  71. package/standard/seeds/research/roles/sponsor.md +16 -0
  72. package/standard/seeds/research/shapes/frame.ethics.md +23 -0
  73. package/standard/seeds/research/shapes/frame.method.md +24 -0
  74. package/standard/seeds/research/shapes/frame.prior-work.md +23 -0
  75. package/standard/seeds/research/shapes/frame.question.md +24 -0
  76. package/standard/seeds/research/shapes/investigation.full.md +49 -0
  77. package/standard/seeds/research/shapes/investigation.note.md +26 -0
  78. package/standard/seeds/software/Framework.md +88 -0
  79. package/standard/seeds/software/README.md +24 -0
  80. package/standard/seeds/software/_gitignore +4 -0
  81. package/standard/seeds/software/me.md +18 -0
  82. package/standard/seeds/software/roles/.gitkeep +0 -0
  83. package/standard/seeds/software/roles/README.md +13 -0
  84. package/standard/seeds/software/roles/designer.md +16 -0
  85. package/standard/seeds/software/roles/developer.md +16 -0
  86. package/standard/seeds/software/roles/framework-owner.md +16 -0
  87. package/standard/seeds/software/roles/project-manager.md +18 -0
  88. package/standard/seeds/software/roles/stakeholder.md +16 -0
  89. package/standard/seeds/software/shapes/.gitkeep +0 -0
  90. package/standard/seeds/software/shapes/frame.architecture.md +26 -0
  91. package/standard/seeds/software/shapes/frame.audience.md +26 -0
  92. package/standard/seeds/software/shapes/frame.criteria.md +27 -0
  93. package/standard/seeds/software/shapes/frame.market.md +31 -0
  94. package/standard/seeds/software/shapes/spec.full.md +67 -0
  95. package/standard/seeds/software/shapes/spec.micro.md +32 -0
@@ -0,0 +1,324 @@
1
+ # Eidos
2
+
3
+ **Version:** 4.5.0
4
+
5
+ A markdown standard for defining the essence of a thing — a product, a body of work, anything you set out to make. One file is the complete source of truth for one unit of it, independent of time or status: as true of something planned as of something long finished.
6
+
7
+ This file is the contract: the terms, the layout, and the rules. It names no collection, no shape, and no section — those belong to a framework, not to the standard. For worked frameworks see [`seeds/`](seeds). Doing the work takes a person, this contract, and the [skills](#for-an-agent).
8
+
9
+ ## Vocabulary
10
+
11
+ Every term the standard uses, in the order they build on each other.
12
+
13
+ | Term | What it is |
14
+ | --- | --- |
15
+ | **root** | The one folder Eidos lives in, holding the framework, the collections, and any top-level docs. Found by the hidden `_eidos/` inside it, never by its name. |
16
+ | **framework** | The *structure* a root is written in — its collections, shapes, flavors, roles, naming convention, and Schema. Lives in the root's hidden `_eidos/`. Portable: the same framework governs any number of roots. |
17
+ | **collection** | A top-level folder of repeated blueprints that share a body shape. A framework declares each one, and may group a collection's blueprints in one level of sub-folders. |
18
+ | **blueprint** | One markdown file in a collection, defining one unit completely. Frontmatter (a contract) plus a body (a shape). |
19
+ | **frame** | A blueprint describing the whole thing rather than one unit of it. Frames set what every other blueprint is judged against, and are revised whenever that judgment changes. Every framework declares a framing collection. |
20
+ | **shape** | One body template: the sections a blueprint carries, in order, under set names, each with its guidance. Body only; frontmatter is generated. One file per shape, in `_eidos/shapes/`. |
21
+ | **flavor** | A collection's shapes are variants of one family, and each variant is a flavor (`<kind>.<flavor>`). A collection declares one or more and marks one default — typically a light flavor a blueprint can grow out of, beside a fuller one. |
22
+ | **property** | One frontmatter field: a name, a type, which collections it applies to, and a meaning. |
23
+ | **Schema** | The framework's whole property contract: the core properties Eidos requires, plus whatever the framework adds. |
24
+ | **top-level doc** | A one-of-a-kind document at the root — a Roadmap, a Vision, the generated canvas. Free-form: no shape, no flavors, no validation. |
25
+ | **role** | A response contract for one kind of person, saying how an agent talks to them. |
26
+ | **actor** | Who is in the seat right now: their role, plus a personal calibration. |
27
+ | **seed** | A starting framework the standard ships. `install` copies one into a new root. |
28
+
29
+ A blueprint captures **state and intent, not work**. A task describes work and dies when the work ships; a blueprint describes the thing and stays accurate across its whole life — drafted, built, deprecated.
30
+
31
+ ## Layout
32
+
33
+ The root is found by the hidden `_eidos/` inside it. It may be named anything; nothing points at it by path.
34
+
35
+ ```txt
36
+ Blueprints/ # the root — `Blueprints` is only the default name
37
+ README.md # the visible "start here"
38
+ _eidos/ # the framework (below)
39
+ <Framing>/ # the framing collection — declared first
40
+ index.md # generated leaf (a markdown framework; a YAML one keeps it inside the document)
41
+ <Frame>.md # one per kind of frame, flat
42
+ <Collection>/ # a collection of blueprints; declare as many as the work needs
43
+ index.md # generated leaf, likewise
44
+ <Group>/ # one level of sub-folders, at most
45
+ <Title>.md # one blueprint per file
46
+ roadmap.md # a top-level doc — optional, yours
47
+ ```
48
+
49
+ Several roots in one repository nest as `Blueprints/<name>/…`, each with its own `_eidos/`.
50
+
51
+ ## The framework (`_eidos/`)
52
+
53
+ Hidden the way `.git` and `.obsidian` are: present, manageable, out of the way once set. The root is plausibly an Obsidian vault, and `_eidos/` sits beside `.obsidian/`.
54
+
55
+ ```txt
56
+ _eidos/
57
+ shapes/ # one file per flavor
58
+ <kind>.<flavor-1>.md # a collection's default flavor
59
+ <kind>.<flavor-2>.md # a second flavor of the same kind
60
+ frame.<kind>.md # the framing collection's flavors, one per kind of frame
61
+ roles/ # response contracts, committed and team-tunable
62
+ framework-owner.md # the one every seed carries
63
+ <role>.md # the rest are the framework's own
64
+ Framework.md # the framework document, for people: version, naming, Top-Level, Collections, Schema
65
+ # (or Framework.yaml, the same as data with the index inside it, for scripts and agents)
66
+ me.md # the actor (personal, gitignored)
67
+ .gitignore # ignores me.md — the one file here not committed
68
+ ```
69
+
70
+ The skills read the framework from the root they are working in, never from a copy of their own. A folder with no `_eidos/` is not a root.
71
+
72
+ ### `Framework.md`
73
+
74
+ The framework document: the one file describing the structure rather than any single blueprint. It has two forms, the same fields in each, and a root keeps exactly one. This is the markdown form, for people: frontmatter for the facts tooling parses and a body indexing what it governs, readable in a vault and edited in place. The other is [`Framework.yaml`](#frameworkyaml), for scripts and agents.
75
+
76
+ ```markdown
77
+ ---
78
+ eidos_version: 4.5.0
79
+ naming: kebab-case
80
+ ---
81
+
82
+ # Framework
83
+
84
+ ## Top-Level
85
+ <!-- configure: top-level index (regenerated) -->
86
+ - [README](../README.md) — the front door.
87
+
88
+ ## Collections
89
+
90
+ ### <Framing collection>
91
+
92
+ The framing docs — declared first.
93
+
94
+ - **Leaf:** [<Framing>/index.md](../<Framing>/index.md)
95
+ - **Flavors:**
96
+ - [<kind>](shapes/frame.<kind>.md) — one flavor per kind of frame (mark one default).
97
+ - **Canvas:** file
98
+
99
+ ### <Collection>
100
+
101
+ One line on what this collection holds.
102
+
103
+ - **Leaf:** [<Collection>/index.md](../<Collection>/index.md)
104
+ - **Flavors:**
105
+ - [<flavor-1>](shapes/<kind>.<flavor-1>.md) — the fuller shape (default).
106
+ - [<flavor-2>](shapes/<kind>.<flavor-2>.md) — a lighter one to grow out of.
107
+ - **Canvas:** card from `## <Section>`
108
+ - **<Grouping>:**
109
+ - **<Group>** — one line on what falls under it.
110
+
111
+ ## Schema
112
+
113
+ ### Eidos Core
114
+ <!-- the standard's block: id, title, summary, flavor, connects_to -->
115
+
116
+ ### Custom Properties
117
+ | Name | Type | Applies To | Meaning |
118
+ | ------ | ---- | ------------ | ------------------------------ |
119
+ | <name> | Text | all | Whatever this framework needs. |
120
+ | <name> | Text | <Collection> | Scoped to one collection. |
121
+ ```
122
+
123
+ - **`eidos_version`** — the version this framework targets. `migrate` reads and bumps it.
124
+ - **`naming`** — `kebab-case` (default), `TitleCase`, or `Title Case`. See [Naming](#naming).
125
+ - **`## Top-Level`** — the top-level docs, `README` first. Framing docs are not here; they are a collection.
126
+ - **`## Collections`** — one `###` each: its **Leaf**, its **Flavors** (default marked), its **Canvas**, and its grouping.
127
+ - **`- **Canvas:**`** — how a canvas generator draws the collection: `file` (a full-file node, for prose read whole), `card` (a node embedding the blueprint), or `card from ## Section` (a node embedding that section). Absent means a plain card — a generator knows no collection by name and cannot guess which section is the summary.
128
+ - **`## Schema`** — `### Eidos Core` (the standard's, rewritten by `migrate`) and `### Custom Properties` (the framework's).
129
+
130
+ ### `Framework.yaml`
131
+
132
+ The framework document may be data instead of markdown: `Framework.yaml` (or `.yml`) in place of `Framework.md`. It is the same framework, field for field, in the snake_case the frontmatter already uses, with comments wherever the owner wants them. Choose it when scripts and agents are the main readers: it parses without a markdown convention, and it carries the one thing the markdown form keeps elsewhere, the generated index, under `index` (see [Generated leaves](#generated-leaves)), so a YAML root is one document with everything in it. Choose markdown when people are: it renders in a vault and reads as prose. The markdown form's prose has no field to land in and stays behind when a root converts.
133
+
134
+ ```yaml
135
+ eidos_version: 4.5.0
136
+ naming: kebab-case # absent = kebab-case
137
+ top_level: # the top-level docs, README first
138
+ - title: README
139
+ path: ../README.md
140
+ description: the front door.
141
+ collections: # the first is the framing collection
142
+ - name: <Framing>
143
+ description: The framing docs.
144
+ canvas: file
145
+ flavors:
146
+ - name: <kind>
147
+ shape: shapes/frame.<kind>.md
148
+ description: one flavor per kind of frame
149
+ default: true
150
+ - name: <Collection>
151
+ description: One line on what this collection holds.
152
+ canvas: { mode: card, section: <Section> }
153
+ flavors:
154
+ - { name: <flavor-1>, shape: shapes/<kind>.<flavor-1>.md, description: the fuller shape, default: true }
155
+ - { name: <flavor-2>, shape: shapes/<kind>.<flavor-2>.md, description: a lighter one to grow out of }
156
+ grouping:
157
+ label: <Grouping>
158
+ property: <name> # the custom property carrying the group, if one does
159
+ groups:
160
+ - { name: <Group>, description: one line on what falls under it }
161
+ schema:
162
+ core: [] # absent = the standard's core for this eidos_version
163
+ custom:
164
+ - { name: <name>, type: Text, applies_to: all, meaning: Whatever this framework needs. }
165
+ - { name: <name>, type: Text, applies_to: [<Collection>], meaning: Scoped to one collection. }
166
+ index: # generated, regenerated wholesale by `index`; never hand-edited
167
+ <Collection>:
168
+ - { id: <id>, title: <Title>, summary: <the summary>, path: <Group>/<Title>.md, group: <Group> }
169
+ ```
170
+
171
+ - Every path is relative to `_eidos/`, as the markdown form's links are. An index entry's `path` is relative to its collection folder, as an `index.md` link is.
172
+ - `canvas` is `file`, `card`, or `{ mode: card, section: <Section> }`. `default` marks a collection's default flavor; absent on all of them, the first is. `applies_to` is `all` or a list of collections. There is no **Leaf**: a structured root's index is inside the document.
173
+ - A tool reads whichever document is present and treats the framework the same. Converting a markdown root means writing the same fields as data, removing `Framework.md` and each collection's `index.md`, and regenerating the index.
174
+
175
+ ### Shapes and flavors
176
+
177
+ A shape is body-only: sections in their order, under set names, with their guidance. Every blueprint in a collection follows one of that collection's declared flavors, and a check validates against the flavor the blueprint names. Shape files are `<kind>.<flavor>.md`, lowercase and dotted. Top-level docs have no shape.
178
+
179
+ The default flavor is what gets scaffolded; a blueprint on another records it in `flavor`. A blueprint on a lighter flavor is never faulted for the sections only a fuller one carries.
180
+
181
+ ### Schema
182
+
183
+ Each property is a row: **Name · Type · Applies To · Meaning**. A type comes from the set Obsidian uses — **Text, List, Number, Checkbox, Date, Date & time** — so frontmatter renders natively in a vault. Anything wanting more structure than one of those belongs in the body.
184
+
185
+ **Applies To** scopes a property to collections: `all`, or a list. Frontmatter is generated per blueprint from the properties that apply to its collection, so a scoped property never lands where it makes no sense.
186
+
187
+ **The core** — present on every blueprint, and the whole of what the standard requires:
188
+
189
+ | Name | Type | Meaning |
190
+ | --- | --- | --- |
191
+ | `id` | Text | Stable, unique, kebab-case identity. Assigned once, never renamed. References point at it. |
192
+ | `title` | Text | Human-readable name. Rename it freely; `id` is what holds still. |
193
+ | `summary` | Text | One plain line: what this blueprint is. The source for the collection's [`index.md`](#generated-leaves) listing; absent, the index flags it. |
194
+ | `flavor` | Text | Which flavor this blueprint follows. Absent = the collection's default. |
195
+ | `connects_to` | List | Blueprints this one connects to on the canvas, each a link, drawn as a directed edge. |
196
+
197
+ **Eidos defines no custom properties.** A lifecycle `status`, dates, a grouping, a dependency list — all are a framework's own choice. Each [seed](seeds) makes its own set. Add one with `configure`, which presses for all four of Name, Type, Applies To, and Meaning, then backfills the blueprints it applies to.
198
+
199
+ ### Roles and the actor
200
+
201
+ Not everyone who works on the same root plays the same part — one holds the intent, another builds or drafts from it, another reviews it, another answers for it. The agent responds to each differently, from two files:
202
+
203
+ - **`_eidos/roles/<role>.md`** — one response contract per role: vocabulary and technical depth, what to surface versus fold away, and who holds which decisions. Which roles exist is the framework's call; each [seed](seeds) ships a set written against its own collections. Committed and team-tunable.
204
+ - **`_eidos/me.md`** — personal and gitignored, one per person. Names the actor's role and calibrates it on three axes: **ownership**, **experience with the scope**, and **technical capacity**. Set it with `whoami`. Blank is fine.
205
+
206
+ One role is common to every seed: the **Framework Owner**, who holds the intent, the scope, and the decisions. The rest of the cast depends on the work.
207
+
208
+ ## Writing
209
+
210
+ ### `README.md`
211
+
212
+ A visible front door at the root: what the thing is, and pointers into it — the top-level docs, the collections and their indexes, and the framework document for the full index. Thin, orientation and links, edited in place.
213
+
214
+ ### Naming
215
+
216
+ Everything a human reads in the tree — top-level docs, collection and sub-folders, blueprint files — follows the framework's `naming` convention.
217
+
218
+ | Convention | A blueprint file | A grouping folder | For |
219
+ | --- | --- | --- | --- |
220
+ | **kebab-case** (default) | `blueprint-title-here.md` | `group-name/` | readable everywhere: no escaping, no `%20`, and the filename *is* the `id` |
221
+ | **TitleCase** | `BlueprintTitleHere.md` | `GroupName/` | space-free, capitalized |
222
+ | **Title Case** | `Blueprint Title Here.md` | `Group Name/` | a tree that reads like prose, at the cost of `%20` in every link |
223
+
224
+ An absent `naming` key means `kebab-case`.
225
+
226
+ One convention governs the whole folder, and changing it later means renaming files, so it is settled at init. Whichever you pick: `_eidos/` is always lowercase; `README.md` keeps the name every tool already looks for; the `id` is always kebab-case; a grouping property's value matches its folder exactly; and fields meant for tools are not names in the tree.
227
+
228
+ ### Linking
229
+
230
+ Point at another blueprint, doc, or section with a standard markdown link: the text is the human title, the path is the target's filename in the framework's convention (only a Title Case tree carries `%20`). Add a `#heading` anchor for a section. Properties that point outward hold links too, not bare ids — quote them in YAML, since a leading `[` starts a list:
231
+
232
+ ```yaml
233
+ depends_on:
234
+ - "[Some Blueprint](../some-group/some-blueprint.md)"
235
+ ```
236
+
237
+ If a target has no blueprint yet, name it plainly rather than fabricating a link.
238
+
239
+ ### Blueprint bodies
240
+
241
+ The body follows its flavor's shape. Keep the shape's order and names; leave a section out when it genuinely doesn't apply rather than leaving it empty. Within and beneath those sections, write it like a person would read it — sub-headings, tables, lists, small diagrams wherever they make the meaning clearer. Keep checkable statements short and observable, labeled the way the shape asks, with supporting detail pushed into a table or sub-section they point at.
242
+
243
+ The sections themselves are documented in the shape file, not here.
244
+
245
+ ### Frames and top-level docs
246
+
247
+ Both are loose prose: record what is true now, revise when it changes. They differ in one way. A **frame** is a blueprint — it follows a shape, carries the frontmatter contract, and is validated. A **top-level doc** is one-of-a-kind, filled in once and edited in place, so it needs no shared shape and gets none. A shape earns its keep by being stamped again; a document written once doesn't need a cookie-cutter.
248
+
249
+ For a top-level doc you've already drafted, `format` organizes it into the house style without adding anything of its own.
250
+
251
+ ## Generated leaves
252
+
253
+ Two derived views. Both are regenerated wholesale, annotate rather than gate, and have nothing hand-written to preserve.
254
+
255
+ **The index.** Each collection carries a generated `index.md` in its folder, listing its blueprints — grouped under their sub-folders when it has them, flat when it doesn't. Each line is the blueprint's `summary`, verbatim; a blueprint with none is flagged, never invented. Links are relative to the collection folder. Rebuilt by `index`.
256
+
257
+ In a root whose framework document is YAML there are no `index.md` files: every collection's index lives inside the framework document under `index`, one list per collection, each entry the blueprint's `id`, `title`, `summary` (null when absent, never invented), `path` relative to the collection folder, and `group` when it has one, in the order the markdown index would list them. The same `index` rebuilds it wholesale, rewriting that key and nothing else in the document.
258
+
259
+ ```markdown
260
+ # <Collection>
261
+
262
+ <!-- index: <Collection> (regenerated) -->
263
+
264
+ ## <Group>
265
+ - [<Title>](<Group>/<Title>.md) — the blueprint's one-line `summary`, verbatim.
266
+ - [<Title>](<Group>/<Title>.md) — one bullet per blueprint, in file order.
267
+ ```
268
+
269
+ **The canvas.** The spatial counterpart: an Obsidian `.canvas` map. Each collection draws the way it declares itself, is its own group, and nests a group per sub-folder; each blueprint's `connects_to` links become directed edges (with `depends_on` optionally overlaid in another color). The generated `.canvas` is itself a top-level doc — register it in `## Top-Level`. The standard ships no generator; the declarations are there for whichever tool draws one.
270
+
271
+ ## Rules
272
+
273
+ The load-bearing conventions.
274
+
275
+ 1. **The frontmatter is the agreement; the body is guidance.** Properties are checked against the framework's Schema. Body sections are recommended structure, not requirements.
276
+ 2. **The root owns its framework.** Shapes and properties live in the root's `_eidos/`. A skill reads the framework from the root it is working in, not from a copy of its own.
277
+ 3. **Validation is framework-defined.** A check reads *that framework's* Schema and enforces it — the core properties plus the custom ones scoped to the blueprint's collection. The contract is the Schema, not a rule hardcoded in a tool.
278
+ 4. **Portability over prescription.** A missing core property is surfaced and added with a note on why; a missing section is noted and offered. Never refuse the file.
279
+ 5. **Write it like a human would read it.** The sections are a scaffold for a living blueprint, not a form to pour text into. If a blueprint reads like filled-in boilerplate, reshape it until it reads like someone wrote it.
280
+ 6. **Reference other blueprints with links, not bare names** — in prose and in properties alike. Each blueprint's `id` is still its permanent identity, sitting behind the link.
281
+ 7. **One shape family per collection, declared as flavors.** What flexes is *which* sections appear and *which* flavor a blueprint uses; never their order or names within a flavor. The shape is never forked per category.
282
+ 8. **Properties carry a type and a meaning.** Every property declares its name, its type, which collections it applies to, and what it means. Frontmatter is generated from the Schema, so a new blueprint is born conforming.
283
+ 9. **Soft labels are views, not structure.** A category label a framework adds drives views and filtering, never structure. An off-list value is valid. `flavor` carries the structural choice.
284
+ 10. **A collection's grouping is the collection's own.** It may group its blueprints one level deep and may declare a property naming that grouping; the value then matches the folder, and an unknown value warns rather than blocks. The standard never names a grouping for it.
285
+ 11. **A shape names its own stable part.** Every shape has a part that holds still and a part that moves, and says which is which. If the stable part changes substantially, ask whether this is a different blueprint.
286
+ 12. **Non-goals carry the most weight.** Where a shape declares a section for what a blueprint deliberately will *not* do, that section is its strongest — it is where scope management actually happens. Still not a hard gate.
287
+ 13. **A shape documents its own conventions.** Section names, their order and meaning, and any labeling a shape asks for live in the shape file. This standard governs collections, shapes, flavors, and properties; it never governs a section.
288
+ 14. **No work-tracking fields.** No `sprint`, `estimate`, or `assignee` — the moment you add them, a blueprint becomes a task and rots. Bridge to a tracker with a link. The same holds in the body: a section describing how you mean to build a thing captures intent, never how far along it is.
289
+ 15. **The Eidos version is a framework fact.** It lives in the framework document, never as a per-blueprint property. Git holds the history; a framework that wants date properties declares them like any other.
290
+ 16. **Loose prose is revised in place.** A top-level doc, and any collection a framework marks as loose prose, records what is true now and is expected to change. That is revision, not work status.
291
+ 17. **The human authors; the agent facilitates.** Intent, scope, and decisions stay with the person. An agent formats, supplements, asks, and holds scope; it does not generate finished blueprints or set direction. A blueprint the owner did not think through is worse than none.
292
+ 18. **Read the actor before acting.** Read `_eidos/me.md` and the matching contract in `_eidos/roles/`, and respond as that role defines. The human-first principle holds for every role; only the mode changes. A blank or absent file defaults to full facilitation.
293
+ 19. **Every framework declares a framing collection.** Its name, its flavors, and how many it carries are the framework's own — a framework needs framing, not a particular set of frames. Required as a **declaration**: a framework that declares none is incomplete and a check says so. Never a gate: a declared frame left unwritten is a gap to surface, not a failure.
294
+
295
+ ## Versioning
296
+
297
+ Semantic Versioning: major for breaking changes, minor for backward-compatible additions, patch for clarifications.
298
+
299
+ This file holds the version of **the standard** — right now, **4.5.0** — and it moves only when the text of this file moves. A framework records the version it targets as `eidos_version` in its framework document; `migrate` reads and bumps it there. At tag time this file is copied as-is into `versions/` under its full semver name, so any two releases, even non-adjacent, can be diffed to migrate between them. Worked hops are in `versions/MIGRATIONS.md`. Tools may reject an unsupported version.
300
+
301
+ **The plugin that ships this standard versions separately.** The skills and seeds change far more often than the standard does, so a release that fixes a skill bumps the plugin and leaves this file — and every framework's `eidos_version` — untouched. When you need to know what a framework conforms to, read this version; the plugin's is in `.claude-plugin/plugin.json`, and `CHANGELOG.md` records which standard each plugin release carried.
302
+
303
+ ## For an agent
304
+
305
+ _Operating detail. A human can stop above._
306
+
307
+ **Prefer the tooling.** The `eidos` command does the mechanical part: `init` scaffolds a root, `new` generates a conforming blueprint, `check` validates, `index` rebuilds the indexes, and `eidos instructions` prints the workflow. The skills carry the judgment: `eidos` authors and validates with the owner, `iterate` questions a rough idea into shape before any of that, `format` reshapes a draft already written, `install` scaffolds, `configure` adds a collection, flavor, or property and keeps the framework current, `index` rebuilds a collection's leaf, `whoami` sets the actor, `migrate` upgrades versions.
308
+
309
+ **Find the framework in the root.** Locate the root by its `_eidos/` marker, not its name. Every operation reads that `_eidos/`. If a folder has none, offer `install`. Check the framework's `eidos_version` against the standard you carry once per session: a gap is worth one line and an offer of `migrate`, never a block, and the framework in front of you is the operative contract either way. Never fall back to a hardcoded contract, and never assume a collection or section name — read what the framework declares.
310
+
311
+ **Read the actor first.** `_eidos/me.md`, then the role file it names. Respond as that file defines the role — read it, don't infer from its filename. A framework defines its own cast.
312
+
313
+ **Navigate by the leaves.** `README.md` for orientation, the framework document (`_eidos/Framework.md` or `.yaml`) for the full index, each collection's `index.md` for its blueprints (or the document's `index`, in a YAML root). Read these instead of scraping the tree; regenerate them when stale.
314
+
315
+ **Authoring a blueprint:**
316
+
317
+ 1. From the framework document, take the Schema, the naming convention, and the target collection's flavors. Pick a flavor (the default unless the owner chooses another) and read its shape for the body. Name the file for its title in the convention; put a permanent kebab-case `id` inside.
318
+ 2. Generate frontmatter from the properties that apply to that collection. Fill values from what the owner tells you; leave a property blank rather than guessing it.
319
+ 3. Lead with the shape's opening sections and press hardest on its non-goals section. Read those names off the shape rather than assuming them, and follow whatever labeling it asks for. Omit a section that doesn't apply; keep the order and names of the ones that do.
320
+ 4. Where the owner is vague, ask. Don't fill the gap with plausible prose.
321
+
322
+ **Validating a blueprint:** check frontmatter against the framework's Schema (`id` kebab-case, dates as `YYYY-MM-DD`, custom properties scoped to the collection). Report missing body sections against *the blueprint's flavor shape*, flagging an absent non-goals section first, and note anything skipping the labeling that shape asks for. Confirm no work-tracking fields crept in. Surface, don't block — the output is a review a human acts on.
323
+
324
+ **Facilitate, don't author.** Format and structure what the owner gives you, supplement, ask, and press on scope. Never invent a blueprint's purpose, decide direction, or hand back a finished blueprint to rubber-stamp. When unsure, ask.
@@ -0,0 +1,25 @@
1
+ # Seeds
2
+
3
+ The starting **frameworks** Eidos ships. A seed is a complete structure layer — collections, body shapes and their flavors, roles, and a property Schema — that [`install`](../skills/install) copies into a new root's `_eidos/`. Pick the one nearest what you're defining; reshape it from there with `configure`.
4
+
5
+ | Seed | For | Collections |
6
+ | --- | --- | --- |
7
+ | [`software/`](software) | a product, service, or system being built | `Frames` (architecture, audience, criteria, market) · `Specs` by domain |
8
+ | [`book/`](book) | a book, long-form argument, or course | `Frames` (premise, reader, voice, market) · `Chapters` by part |
9
+ | [`research/`](research) | a question, a study, or a programme of inquiry | `Frames` (question, prior work, method, ethics) · `Investigations` by strand |
10
+
11
+ Every seed carries the same pieces, so the skills work identically across them:
12
+
13
+ ```txt
14
+ <seed>/
15
+ shapes/ # body shapes, one file per flavor (<kind>.<flavor>.md)
16
+ roles/ # response contracts, one per role
17
+ Framework.md # version, naming, Top-Level, Collections, and the property Schema
18
+ me.md # blank actor frame (installs gitignored)
19
+ .gitignore # keeps me.md out of version control
20
+ README.md # the {{Product}} front-door template
21
+ ```
22
+
23
+ **Three seeds, one standard.** `software` is the default and the one the standard teaches from, but nothing in Eidos knows a collection by name: `book` calls its units `Chapters` and groups them by `part`, `research` calls them `Investigations` and groups them by `strand`, and both work the same way the software seed does. A seed is a starting point, not a cage — and it's the same kind of artifact you'd publish for someone else to start from.
24
+
25
+ **None of these fit?** Start from the nearest and reshape it, or scaffold your own collections with `configure`.
@@ -0,0 +1,87 @@
1
+ ---
2
+ # The Eidos version this framework targets; migrate reads and bumps it.
3
+ eidos_version: 4.5.0
4
+ # How files, folders, and links are named: kebab-case | TitleCase | Title Case. Absent = kebab-case.
5
+ naming: kebab-case
6
+ ---
7
+
8
+ # Framework
9
+
10
+ The framework's index and config, in one place: the version and naming convention above, and below the
11
+ Top-Level documents, the Collections (with their flavors and grouping), and the property Schema. The
12
+ visible `README.md` at the root is the friendly door to it; keep it current with the
13
+ `configure` skill.
14
+
15
+ ## Top-Level
16
+
17
+ <!-- configure: top-level index (regenerated) -->
18
+ - [README](../README.md) — the root's front door: what this book is, and pointers in.
19
+ <!-- One bullet per top-level document. README is the door and comes first; add your own below (an
20
+ Outline, a Synopsis, the generated Blueprint Map canvas), each a link and a one-line description.
21
+ The framing docs live in the Frames collection, not here. configure refreshes this list. -->
22
+
23
+ ## Collections
24
+
25
+ A collection is a top-level folder of repeated blueprints that share a body shape. `Frames` holds the
26
+ framing docs — the most primary thing the folder says about itself — and `Chapters` the book's
27
+ units. Add more with `configure`. Each lists its flavors (the default marked), how it draws on
28
+ the canvas, and its grouping, and points at its generated `index.md` leaf.
29
+
30
+ ### Frames
31
+
32
+ The framing docs that set what every chapter is judged against — what the book argues, who it is for,
33
+ how it sounds, and where it sits. This framework's framing collection; each frame follows the flavor
34
+ of its kind, and one left unwritten is a gap to surface, not a failure.
35
+
36
+ - **Leaf:** [Frames/index.md](../Frames/index.md)
37
+ - **Flavors:**
38
+ - [premise](shapes/frame.premise.md) — what the book says, and why it has to exist (default).
39
+ - [reader](shapes/frame.reader.md) — who it is for, and what changes for them.
40
+ - [voice](shapes/frame.voice.md) — person, tense, register, and the rules the prose keeps.
41
+ - [market](shapes/frame.market.md) — shelf, comparables, and how it reaches readers.
42
+ - **Canvas:** file
43
+
44
+ ### Chapters
45
+
46
+ The book's units, one per chapter, grouped by part.
47
+
48
+ - **Leaf:** [Chapters/index.md](../Chapters/index.md)
49
+ - **Flavors:**
50
+ - [full](shapes/chapter.full.md) — the complete chapter shape (default).
51
+ - [sketch](shapes/chapter.sketch.md) — Intent, Open Questions, What Happens, Out of Scope; grow into full.
52
+ - **Canvas:** card from `## Intent`
53
+ - **Parts:** _(add one bullet per part — a name and a short description — as parts accrue)_
54
+
55
+ ## Schema
56
+
57
+ The property contract — what a blueprint's frontmatter may carry, across every collection. Two parts: the
58
+ **core** properties Eidos's own machinery uses, and the **custom** ones you (or the seed) add. Every
59
+ custom property declares which collections it **applies to** — `all`, or a list — so a property never
60
+ lands where it makes no sense (`part` is Chapters-only). A property's type comes from the Obsidian set
61
+ (Text, List, Number, Checkbox, Date, Date & time), so frontmatter renders natively in an Obsidian
62
+ vault. The `configure` skill edits this section.
63
+
64
+ ### Eidos Core
65
+
66
+ _Present on every blueprint. Managed by the standard (Eidos 4.5.0); `migrate` rewrites this block on a version change — don't hand-edit it. (`flavor` absent = the collection's default; `connects_to` absent = no canvas edges; a missing `summary` is flagged by the index.)_
67
+
68
+ | Name | Type | Meaning |
69
+ | ----------- | ---- | ---------------------------------------------------------------------------------------------- |
70
+ | id | Text | Stable, unique, kebab-case identity. Assigned once, never renamed. References point at it. |
71
+ | title | Text | Human-readable name. |
72
+ | summary | Text | One plain line — what this blueprint is, in a sentence, distilled from Intent. Source for the collection index.md listing; absent, the index flags it. |
73
+ | flavor | Text | Which body flavor this blueprint follows, from its collection's declared flavors. Absent = the collection's default flavor. |
74
+ | connects_to | List | Blueprints this one connects to on the canvas, each a markdown link; drawn as a directed edge (this → target). The intentional map, distinct from depends_on. |
75
+
76
+ ### Custom Properties
77
+
78
+ _Yours to shape with the `configure` skill. The seed ships a few useful defaults below — keep, scope, or drop any of them; Eidos doesn't depend on them. Absence where a property applies is a soft gap the validator notes, never refuses._
79
+
80
+ | Name | Type | Applies To | Meaning |
81
+ | ------------- | ---- | ---------- | ------------------------------------------------------------------------------------------ |
82
+ | status | Text | all | Lifecycle value: Draft / Outlined / Drafted / Revised / Final / Cut. An off-list value warns. |
83
+ | date_created | Date | all | YYYY-MM-DD. The day the blueprint was first written. Set once. |
84
+ | date_modified | Date | all | YYYY-MM-DD. The day the blueprint was last changed. |
85
+ | tags | List | all | Free tags. |
86
+ | part | Text | Chapters | The grouping, matching the blueprint's sub-folder under its collection in the naming convention. An unknown value warns, never fails. |
87
+ | depends_on | List | Chapters | Chapters a reader must have read first, each a markdown link. A reading dependency, not a canvas edge. |
@@ -0,0 +1,22 @@
1
+ # {{Product}}
2
+
3
+ > **Start here.** This is the root for **{{Product}}** — the source of truth for what this
4
+ > book is, chapter by chapter, true whether or not a word of it is drafted.
5
+
6
+ {{One line: what the book says, and who it is for.}}
7
+
8
+ ## Where things are
9
+
10
+ - **[Frames](Frames/index.md)** — what the book argues, who reads it, how it sounds, where it sits.
11
+ - **[Chapters](Chapters/index.md)** — one file per chapter, grouped by part.
12
+
13
+ The full index — every collection, its flavors, and the property Schema — is in
14
+ [`_eidos/Framework.md`](_eidos/Framework.md).
15
+
16
+ ## How to use it
17
+
18
+ A chapter here describes what the chapter **is**: why it exists, what happens in it, and what the
19
+ reader leaves with. It is not a draft and not a task. Write the chapter's blueprint before the prose,
20
+ and keep it true after — a chapter you cut stays here, marked `Cut`, so the reasoning survives.
21
+
22
+ _A root. Its framework lives in [`_eidos/`](_eidos/); see [`_eidos/Framework.md`](_eidos/Framework.md) for the full index._
@@ -0,0 +1,4 @@
1
+ # Eidos: the per-actor file is personal and never shared.
2
+ # Each person who works on this definition keeps their own me.md (here in _eidos/); the agent reads
3
+ # it to know who they are. It is the one _eidos/ file that is not checked in.
4
+ me.md
@@ -0,0 +1,18 @@
1
+ # Me
2
+
3
+ Who is in the seat. This file is **personal and per-actor** — it is gitignored and never checked in, so
4
+ each person who works on this folder keeps their own. The agent reads it before acting, to know who
5
+ you are and how to help.
6
+
7
+ Set who you are below — `install` asks, or just edit this file. Leaving it blank is fine: the agent
8
+ defaults to full, framework-owner-style facilitation and offers to record who you are.
9
+
10
+ ## You are:
11
+
12
+ <!-- Name your role and how you want to be helped. The base roles Eidos recognizes:
13
+ - Framework Owner — holds intent, scope, decisions; full authoring, press on scope.
14
+ - Developer — consumes specs to build; surface what's specced, clarify, flag gaps, help Testing/ACs.
15
+ - Stakeholder — reviews direction; explain, summarize, surface risk.
16
+ - Designer — shapes UX and audience; Audience, Behaviors, external interface.
17
+ - Project Manager — tracks scope and progress; in/out of scope, status, dependencies, effort.
18
+ Or write your own. -->
@@ -0,0 +1,12 @@
1
+ # Roles
2
+
3
+ Default **roles** for this framework — who is in the seat, and how the agent should respond to them. A role is a **response contract**: it sets the vocabulary, the level of technical depth, what to surface vs. fold away, and who holds which decisions. The agent reads it **before acting** (see the Eidos standard's `EIDOS.md`, "The actor").
4
+
5
+ These are the book seed's baseline, browsable here and installed into a root's `_eidos/roles/` by `install` (committed, so a team can tune how a role is treated for their book). Each person who works on the folder picks one in their personal, gitignored `_eidos/me.md` and **calibrates** it — what they own on this folder, their experience with the scope, and their technical capacity — with the `whoami` skill. Role sets the baseline; calibration tunes it per person.
6
+
7
+ - [Framework Owner](framework-owner.md) — holds intent, scope, and decisions.
8
+ - [Editor](editor.md) — reads for structure and what the book promises.
9
+ - [Collaborator](collaborator.md) — drafts alongside the owner.
10
+ - [Reader](reader.md) — reacts to the book, doesn't build it.
11
+
12
+ A role is a baseline, not a cage: an actor can write a custom role in their `me.md`, and a framework can add or reshape role files here. The human-first principle holds for every role — the human authors and decides; the role only changes _how_ the agent helps.
@@ -0,0 +1,16 @@
1
+ # Collaborator
2
+
3
+ ## Who they are
4
+
5
+ Writes alongside the owner — a co-author, ghostwriter, or researcher. Reads a chapter to answer "what exactly am I drafting, and in whose voice?"
6
+
7
+ ## How to respond
8
+
9
+ - **Vocabulary & depth:** full detail. The Voice frame's rules, the beats in order, the dependencies, and anything still undecided that would send a draft the wrong way.
10
+ - **Decisions:** clarify and flag, don't decide. Argument, structure, and voice belong to the Framework Owner; surface the ambiguity rather than resolving it in the prose.
11
+ - **Surface / hide:** surface What Happens, Voice, Dependencies, and Open Questions. Say plainly when a beat is underspecified.
12
+ - **Focus:** what is promised versus what is vague; whether a chapter's beats can actually be drafted from what is written.
13
+
14
+ ## Calibration
15
+
16
+ **Experience with the scope** sets how much of the Frames to restate before getting to the chapter.
@@ -0,0 +1,16 @@
1
+ # Editor
2
+
3
+ ## Who they are
4
+
5
+ Reads for structure before prose. Wants to know what each chapter is for, whether the book delivers what the Premise promises, and where two chapters are doing the same work.
6
+
7
+ ## How to respond
8
+
9
+ - **Vocabulary & depth:** craft terms are welcome — arc, pacing, throughline, register. Skip production mechanics unless asked.
10
+ - **Decisions:** name the structural problem and the options; the cut, the merge, and the reorder belong to the Framework Owner.
11
+ - **Surface / hide:** surface Intent, What the Reader Leaves With, Out of Scope, and Dependencies across chapters. Fold away drafting notes.
12
+ - **Focus:** promises made in the Frames versus what the Chapters actually deliver; overlap between neighbors; a chapter whose Intent no longer matches its beats.
13
+
14
+ ## Calibration
15
+
16
+ **Experience with the scope** sets how much of the book's argument to restate; **technical capacity** rarely matters here — talk craft, not tooling.
@@ -0,0 +1,16 @@
1
+ # Framework Owner
2
+
3
+ ## Who they are
4
+
5
+ Holds the **intent, scope, and decisions** — true ownership of whatever it defines, be it a product, a body of research, a methodology, or any other form of thought or effort. The person Eidos is built for — they think through what the thing is, and they own the calls. Everything else serves their clarity.
6
+
7
+ ## How to respond
8
+
9
+ - **Vocabulary & depth:** lead with the terms of the thing itself and the decision at hand. But many Framework Owners are also technical — don't assume otherwise; follow their **technical capacity** calibration and go as deep as they want, rather than withholding mechanism by default.
10
+ - **Decisions:** theirs. Bring choices and trade-offs for them to decide; never decide direction or resolve an Open Question on their behalf. Press hardest on **Out of Scope**.
11
+ - **Surface / hide:** surface intent, scope, audience, criteria, and the consequences of a choice; fold mechanism into a link they can follow.
12
+ - **Focus:** Intent, Out of Scope, the Premise and Reader frames, and whether each chapter still says what they mean.
13
+
14
+ ## Calibration
15
+
16
+ Their **experience with the scope** and **technical capacity** adjust the dials above — a non-technical owner gets less jargon and more translation; a technical owner gets the mechanism without hand-holding; a deeply-experienced one gets less orientation. Determining direction is the constant; technical fluency is not assumed either way.
@@ -0,0 +1,16 @@
1
+ # Reader
2
+
3
+ ## Who they are
4
+
5
+ A beta reader or early audience. Not a maker of the book — a test of it. Reads to react, not to fix.
6
+
7
+ ## How to respond
8
+
9
+ - **Vocabulary & depth:** plain language. No craft jargon, no process, no drafting state. Talk about what the book says and does, never how it is being made.
10
+ - **Decisions:** none are theirs. Ask what landed and what didn't; don't invite them to redesign the book.
11
+ - **Surface / hide:** surface Intent and What the Reader Leaves With, in the book's own terms. Hide Open Questions, Decisions, Dependencies, and anything marked Cut.
12
+ - **Focus:** whether the promise in the Frames is one they'd want, and whether a chapter delivered it.
13
+
14
+ ## Calibration
15
+
16
+ **Technical capacity** is assumed low for the book's craft regardless of the reader's own field; **experience with the scope** sets how much of the premise to set up first.
@@ -0,0 +1,45 @@
1
+ <!--
2
+ The Chapter shape — the body of a chapter, and the documentation of each section. A chapter's
3
+ frontmatter is generated from the framework's Schema (in Framework.md), so it is not written here.
4
+ Keep the sections that apply and delete the rest, but leave the order and headings as they are — a
5
+ reader should know what to expect from any chapter in this folder. The italic prompts are
6
+ guidance; delete them as you fill each section in.
7
+ -->
8
+
9
+ # {{title}}
10
+
11
+ ## Intent
12
+
13
+ _Why this chapter exists — the work it does that no other chapter does. One or two paragraphs. This is the stable part: if Intent changes substantially, you probably have a different chapter, not an edit to this one._
14
+
15
+ ### Assumptions
16
+
17
+ _What you're taking as given about the reader arriving here — what they already accept, what they've already read. Nested under Intent because they frame it. Surface them so a guess doesn't slip into What Happens as if it were settled._
18
+
19
+ ## Open Questions
20
+
21
+ _Unresolved questions — what you don't yet know about this chapter and still need answered. Kept high, right after Intent, so uncertainty is seen rather than buried. When one is settled it graduates into an Assumption, a beat, or a Decision._
22
+
23
+ ## What Happens
24
+
25
+ _The chapter's content as observable beats — the argument it makes or the events it covers, in order. Label each beat **B1:**, **B2:**, … (bold, unique within this chapter). Keep each beat short and checkable against a draft; push rich detail into a table or sub-section it points to. Evolves freely._
26
+
27
+ - **B1:** <!-- the first thing this chapter does to the reader -->
28
+
29
+ ## What the Reader Leaves With
30
+
31
+ _The checkable outcome — what a reader can do, believe, or feel at the end that they couldn't at the start. If it isn't listed here, this chapter doesn't promise it._
32
+
33
+ ## Out of Scope
34
+
35
+ _Explicit non-goals — what this chapter deliberately does not cover, and which chapter covers it instead. The section the standard leans on hardest, because this is where a book's structure is actually held. A chapter without it tends to sprawl into its neighbors._
36
+
37
+ ## Dependencies
38
+
39
+ _What a reader must have read, or you must have written, before this chapter works: earlier chapters, a Frame, an interview, a permission. The `depends_on` property at the top is the chapter-only subset of this, as links. Reference other chapters as markdown links — never bare names._
40
+
41
+ ## Notes & Decisions
42
+
43
+ _Two things under one header. **Notes**: sources, quotes to chase, craft reminders specific to this chapter. **Decisions**: an append-only log, one line each, with an optional but recommended date._
44
+
45
+ <!-- 2026-08-26: Moved the framing anecdote to Chapter 1, it was doing the same work twice. (Brenton) -->