Eidos

Every part of your product, one file you can check.

A blueprint is a plain markdown file: typed properties on top, a body shaped by a template, and a permanent id that every task, decision, and canvas node points at. You declare the framework it follows, and eidos check tells you where a file has drifted from it.

Free for macOS, Windows, and Linux. No account, no subscription.

The Resume Playback blueprint open in Eidos: its id B-V63 and its path, a one-line summary, typed properties (variant, status, dates, domain, type, and a Depends On link to Profiles), then the body under the template’s headings, Intent, Assumptions, and Open Questions, with the sections listed down the right.
A blueprint reads as the file it is: properties on top, the template’s sections below.

Your framework

A structure you declare, not one you are handed

The framework lives in your root: the collections you keep (specs, chapters, characters, investigations, whatever your work is made of), a template for each variant with the sections it offers and the ones it requires, and a Properties table with types, options, and what each one means. Edit it as forms under Framework settings, or with eidos configure from a terminal.

  • Collections and variants, named in your words
  • Required sections and typed properties with options
  • Vocabulary and roles, so people and agents use the same words
Framework settings at Templates: the frames and specs variants listed on the left, and the full spec template open in the builder, its sections in order, each with a type and a Required switch, and the intent that tells a writer what belongs there.

The health check

A health check you can act on

eidos check reads every blueprint against your framework: a value off a property’s options, a required property left empty, a work-tracking field on a blueprint, a stale index, a broken link. The Health Check lists each finding under its file, and Fix all supported issues runs every fix the app knows, asking first before any that renames a file or changes an id.

  • Errors for what is wrong on any reading, warnings for gaps
  • Whether a warning fails is the root’s setting, kept in git
  • The same findings in the app, a terminal, and CI
The Health Check with 0 errors and 9 warnings and a Fix all supported issues (4) button. Findings are grouped by file: a stale index, an undeclared file, a decision file to rename, a status value that is not one of its options, a work-tracking field, two linter drifts with a Lint button each, and a decisions region to project.

The Registry

Start from a framework someone already shaped

The Registry holds frameworks people have published: software, a book, research, a fictional world, a channel, a school, a renovation, a wedding, and more. Open one in the app and every piece is marked as missing from your root, the same, or different. Include in this root brings in the whole thing or only the collection you want, and asks before it replaces anything you hold differently.

  • In the app, or eidos install @owner/name
  • Keep current or Accept incoming, conflict by conflict
  • Publish your own with a pull request
The research framework open from the Registry inside Eidos: its Frames and Investigations collections, each variant and role marked Not in this root with an Include button beside it, the README marked as different from the root’s, and Include in this root at the top.

Collections

Every collection is a table

Each collection opens as a table of its blueprints, sorted, filtered, and searched by any property. The filters live in the address, so a link opens the same view, and Save as view keeps one for you or shares it with everyone in the root.

The specs collection as a table, grouped by domain, with each blueprint’s summary, status, and type.

Surfaced, never refused

Properties are the agreement and sections are guidance. A missing property is noted and a missing section is offered; a file is never refused, because a check that refuses files gets worked around. A section the blueprint lacks is drawn greyed where it belongs, with a + that adds it.

A permanent id, wherever the file goes

Each blueprint keeps an id such as B-V63. Move it to another group, or give it a new id, and every task, decision, comment, canvas node, and link that points at it follows. Find anything by id or title from Quick Open.

Set up with your agent

Making a new root in the desktop app, Set up with AI Agent can have your agent read the folder first, then recommend a framework from the Registry or propose one of its own. Nothing is written until you have reviewed it and pressed Create root.

How it connects

Everything else points at a blueprint.

No plugin keeps a second copy of what a blueprint says. Each one refers to it by its permanent id, and most write what they know back into it.

  • Backlog

    A task serves blueprints by id, and each blueprint lists its tasks under Attached tasks and in a Tasks section.

  • Decisions

    A decision names the blueprints it was made for and is written into their Decisions section.

  • Canvas

    A node is a blueprint drawn live from its file, and a sketch becomes one through the same template.

  • Comments

    A thread anchors to a section or an acceptance criterion and is written at the foot of the file.

  • AI Agent

    The open blueprint rides along with each message, and /check runs the health check into the chat.

  • Linter

    One markdown style on every save, with drift reported in the health check.

  • Git

    Every blueprint has its history and a diff, committed with the code it describes.

From the shell

The check, from a terminal

The same findings the page shows, with an exit code for CI and --json for an agent. A property is set from the shell, coerced to its declared type, and checked as it is written.

$ eidos check specs/billing/gift-cards.md
Blueprints  (Eidos 5.5.0 · kebab-case)  1 blueprint

specs/billing/gift-cards.md
  ⚠ summary-missing      no `summary`; the collection index will flag it
  ⚠ work-tracking-field  `estimate` is a work-tracking field; a blueprint captures state and intent, not work (link to a tracker instead)
  ⚠ property-option      `status: WIP` is not one of its options (Draft, Intake, In Progress, Done, Archived, Deprecated)
  ⚠ linter/list-marker   one marker for every unordered list; the file drifted (eidos linter --fix)

⚠ 0 errors, 4 warnings
$ eidos property set @B-G24 status Draft
✓ specs/billing/gift-cards.md  status: Draft
  ⚠ summary-missing  no `summary`; the collection index will flag it
  ⚠ work-tracking-field  `estimate` is a work-tracking field; a blueprint captures state and intent, not work (link to a tracker instead)
Read about frameworks and blueprints

Write down what you’re making.

Download Eidos MD, open a folder, and start from the framework closest to your work. Everything it gives you can be reshaped later.

Free for macOS, Windows, and Linux. Your files stay plain text in a folder you own.