Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
5 changes: 5 additions & 0 deletions .changeset/adapting-a-starter.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"@design-intelligence/ghost": minor
---

The skill bundle gains the `adapting-a-starter` recipe: the seven-step transplant procedure for turning an installed starter — a body like vessel-light or the naked skeleton — into your own brand's fingerprint, plus guidance for consuming an unadapted starter honestly.
5 changes: 5 additions & 0 deletions .changeset/body-install.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"@design-intelligence/ghost": minor
---

`ghost init` gains `--body vessel-light`: install a full inhabited fingerprint package — answered signature dials, a materials tree with tokens and embedded fonts, annotated reference compositions, and its own checks. Init template payloads now ship as packed files in dist, so bodies can carry binary materials.
2 changes: 1 addition & 1 deletion .changeset/config.json
Original file line number Diff line number Diff line change
Expand Up @@ -7,5 +7,5 @@
"access": "public",
"baseBranch": "main",
"updateInternalDependencies": "patch",
"ignore": ["@design-intelligence/vessel", "ghost-docs"]
"ignore": ["@design-intelligence/vessel-react", "ghost-docs"]
}
5 changes: 5 additions & 0 deletions .changeset/median-headings-vessel-docs.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"@design-intelligence/ghost": patch
---

Reframe the median as Ghost-stamped model truth and align Vessel's median check with heading anchors.
5 changes: 5 additions & 0 deletions .changeset/median-one-home.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"@design-intelligence/ghost": minor
---

The median floor gets one authored home: `anti-goal.median` rules become markdown headings with per-rule check references, so `ghost validate` warns on every flag orphaned by pruning. All init templates (`skeleton`, `minimal`, `composition`) now stamp the median node; `ghost checks init` copies the paired check from the packaged payload and skips it when the node is absent.
5 changes: 5 additions & 0 deletions .changeset/review-locator-matching.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"@design-intelligence/ghost": patch
---

`ghost review` now resolves package-relative `materials/…` locators to their repo-relative form before matching diff paths, so packages living below the repo root offer their value checks correctly.
5 changes: 5 additions & 0 deletions .changeset/skeleton-default-template.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"@design-intelligence/ghost": minor
---

`ghost init` now scaffolds the skeleton starter: value-free grammar nodes, unanswered signature dials, and the `anti-goal.median` floor — replacing the Morrow Ledger demo content. `ghost checks init` scaffolds a live median-tells check alongside the example. `steering` remains as an alias for the new `skeleton` template.
2 changes: 1 addition & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -26,4 +26,4 @@ packages/ghost-ui/.ghost/cache/*
docs/superpowers/plans/
docs/superpowers/specs/
notes/
demo/
/demo/
3 changes: 2 additions & 1 deletion CLAUDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -89,7 +89,8 @@ edits and checks.
| Package | Published? | Description |
| --- | --- | --- |
| `packages/ghost` | yes: `@design-intelligence/ghost` | The public package. Ships the `ghost` CLI, node authoring, corpus validation, gather/pull/pulse, review packet assembly, and the unified skill bundle. Shared runtime lives in `packages/ghost/src/ghost-core`. |
| `packages/vessel` | no | A standalone shadcn component registry plus `vessel-mcp` MCP server: the opinionated default reference body. Design-system-agnostic; nothing in Ghost requires it. |
| `packages/vessel-react` | no | A standalone shadcn component registry plus `vessel-mcp` MCP server: the opinionated default reference body. Design-system-agnostic; nothing in Ghost requires it. |
| `packages/vessel-light` | no | Vessel's design language as a portable `.ghost/` fingerprint package for agents writing raw HTML/CSS. No build, no dependencies. |
| `apps/docs` | no | Docs site. |

## CLI Commands
Expand Down
2 changes: 1 addition & 1 deletion CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,7 @@ the list.
## Dogfooding

Surfaces in this repo carry their own fingerprints: `apps/docs/.ghost` and
`packages/vessel/.ghost`. If you touch a surface, `ghost gather` from its
`packages/vessel-react/.ghost`. If you touch a surface, `ghost gather` from its
fingerprint before you build, and expect review against it. This is where
you experience Ghost as a user — treat friction you hit here as a bug worth
reporting.
Expand Down
3 changes: 2 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -189,7 +189,8 @@ point at things that moved.
| Path | Role | Published? |
| ---- | ---- | --- |
| [`packages/ghost`](./packages/ghost) | The public `ghost` CLI, node authoring, corpus validation, gather/pull, review packet assembly, and the skill bundle. | yes: `@design-intelligence/ghost` |
| [`packages/vessel`](./packages/vessel) | A standalone shadcn component registry plus `vessel-mcp` MCP server. | no |
| [`packages/vessel-react`](./packages/vessel-react) | A standalone shadcn component registry plus `vessel-mcp` MCP server. | no |
| [`packages/vessel-light`](./packages/vessel-light) | Vessel's design language as a portable `.ghost/` fingerprint for agents writing raw HTML/CSS. | no |
| [`apps/docs`](./apps/docs) | Docs site. | no |

## Development
Expand Down
8 changes: 4 additions & 4 deletions apps/docs/.ghost/asset.docs-materials.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,17 +8,17 @@ materials:
- apps/docs/src/app/**/*.tsx
- apps/docs/src/content/docs/*.mdx
- apps/docs/src/generated/cli-manifest.json
- packages/vessel/src/styles/main.css
- packages/vessel/src/components/**
- packages/vessel-react/src/styles/main.css
- packages/vessel-react/src/components/**
---

Do not invent docs-site vocabulary before inspecting the materials already in
place.

Material contract:

- **Tokens and primitives** come from `@design-intelligence/vessel/styles.css`,
backed by `packages/vessel/src/styles/main.css`. Author with semantic roles
- **Tokens and primitives** come from `@design-intelligence/vessel-react/styles.css`,
backed by `packages/vessel-react/src/styles/main.css`. Author with semantic roles
(`bg-background`, `text-foreground`, `text-muted-foreground`, `border-border`,
`bg-card`) and the named docs typography variables (`--heading-*`,
`--label-*`). Avoid raw palette utilities unless they are already part of a
Expand Down
2 changes: 1 addition & 1 deletion apps/docs/.ghost/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ materials:
This fingerprint governs the Ghost docs site: the landing page, documentation
index, tool landings, MDX docs pages, and the small components that carry them.
It does not govern Vessel as a reference component registry; Vessel has its own
fingerprint under `packages/vessel/.ghost/`. When the docs consume Vessel
fingerprint under `packages/vessel-react/.ghost/`. When the docs consume Vessel
materials, this fingerprint decides the docs' product stance and Vessel decides
the component-system contract.

Expand Down
2 changes: 1 addition & 1 deletion apps/docs/.ghost/principle.visual-composition.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ materials:
- apps/docs/src/app/docs/page.tsx
- apps/docs/src/app/tools/**/*.tsx
- apps/docs/src/components/docs/**
- packages/vessel/src/styles/main.css
- packages/vessel-react/src/styles/main.css
---

The Ghost docs site should render like a stark technical artifact with one
Expand Down
2 changes: 1 addition & 1 deletion apps/docs/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

**Documentation site for the Ghost project.**

`ghost-docs` is the deployed docs for everything in this monorepo: the `ghost` CLI, the fingerprint package format, the generation loop, and the live `vessel` component catalogue. A Vite + MDX app that consumes [`vessel`](../../packages/vessel) as a workspace dependency.
`ghost-docs` is the deployed docs for everything in this monorepo: the `ghost` CLI, the fingerprint package format, the generation loop, and the live `vessel` component catalogue. A Vite + MDX app that consumes [`vessel-react`](../../packages/vessel-react) as a workspace dependency.

## Run

Expand Down
2 changes: 1 addition & 1 deletion apps/docs/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
"typecheck": "tsc --noEmit"
},
"dependencies": {
"@design-intelligence/vessel": "workspace:*",
"@design-intelligence/vessel-react": "workspace:*",
"@hookform/resolvers": "^5.2.2",
"@radix-ui/react-accordion": "^1.2.12",
"@radix-ui/react-alert-dialog": "^1.1.15",
Expand Down
2 changes: 1 addition & 1 deletion apps/docs/src/App.tsx
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { ThemeProvider } from "@design-intelligence/vessel";
import { ThemeProvider } from "@design-intelligence/vessel-react";
import { useEffect } from "react";
import { Navigate, Route, Routes, useLocation } from "react-router";
import DocsIndex from "@/app/docs/page";
Expand Down
2 changes: 1 addition & 1 deletion apps/docs/src/app/docs/page.tsx
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
"use client";

import { useStaggerReveal } from "@design-intelligence/vessel";
import { useStaggerReveal } from "@design-intelligence/vessel-react";
import { BookOpen, FileText, Rocket, ShieldCheck, Zap } from "lucide-react";
import type { ReactNode } from "react";
import { Link } from "react-router";
Expand Down
2 changes: 1 addition & 1 deletion apps/docs/src/app/page.tsx
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { useStaggerReveal } from "@design-intelligence/vessel";
import { useStaggerReveal } from "@design-intelligence/vessel-react";
import { Hero } from "@/components/docs/hero";
import { SectionWrapper } from "@/components/docs/wrappers";

Expand Down
2 changes: 1 addition & 1 deletion apps/docs/src/app/tools/drift/page.tsx
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
"use client";

import { useStaggerReveal } from "@design-intelligence/vessel";
import { useStaggerReveal } from "@design-intelligence/vessel-react";
import { BookOpen, Orbit, Rocket } from "lucide-react";
import type { ReactNode } from "react";
import { Link } from "react-router";
Expand Down
2 changes: 1 addition & 1 deletion apps/docs/src/app/tools/page.tsx
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
"use client";

import { useStaggerReveal } from "@design-intelligence/vessel";
import { useStaggerReveal } from "@design-intelligence/vessel-react";
import { FileText, Orbit } from "lucide-react";
import type { ReactNode } from "react";
import { Link } from "react-router";
Expand Down
2 changes: 1 addition & 1 deletion apps/docs/src/app/tools/scan/page.tsx
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
"use client";

import { useStaggerReveal } from "@design-intelligence/vessel";
import { useStaggerReveal } from "@design-intelligence/vessel-react";
import { BookOpen, FileText, Rocket } from "lucide-react";
import type { ReactNode } from "react";
import { Link } from "react-router";
Expand Down
2 changes: 1 addition & 1 deletion apps/docs/src/components/docs/callout.tsx
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { cn } from "@design-intelligence/vessel";
import { cn } from "@design-intelligence/vessel-react";
import type { ReactNode } from "react";

type Variant = "info" | "warning" | "wip";
Expand Down
2 changes: 1 addition & 1 deletion apps/docs/src/components/docs/doc-prose.tsx
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { cn } from "@design-intelligence/vessel";
import { cn } from "@design-intelligence/vessel-react";
import type { ComponentProps } from "react";

export function DocProse({
Expand Down
2 changes: 1 addition & 1 deletion apps/docs/src/components/docs/dock.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ import {
TooltipContent,
TooltipTrigger,
useTheme,
} from "@design-intelligence/vessel";
} from "@design-intelligence/vessel-react";
import type { LucideIcon } from "lucide-react";
import {
BookOpen,
Expand Down
2 changes: 1 addition & 1 deletion apps/docs/src/components/docs/docs-page-layout.tsx
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
"use client";

import { cn } from "@design-intelligence/vessel";
import { cn } from "@design-intelligence/vessel-react";
import type { ReactNode } from "react";

/**
Expand Down
2 changes: 1 addition & 1 deletion apps/docs/src/components/docs/external-link.tsx
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { cn } from "@design-intelligence/vessel";
import { cn } from "@design-intelligence/vessel-react";
import { ArrowUpRight } from "lucide-react";
import { ComponentProps } from "react";

Expand Down
2 changes: 1 addition & 1 deletion apps/docs/src/components/docs/page-header.tsx
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { cn } from "@design-intelligence/vessel";
import { cn } from "@design-intelligence/vessel-react";
import { ComponentProps } from "react";

function PageHeader({
Expand Down
2 changes: 1 addition & 1 deletion apps/docs/src/components/docs/tooltip-wrapper.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ import {
Tooltip,
TooltipContent,
TooltipTrigger,
} from "@design-intelligence/vessel";
} from "@design-intelligence/vessel-react";
import { ComponentProps } from "react";
import { useShowTooltips } from "@/store/preferences-store";

Expand Down
2 changes: 1 addition & 1 deletion apps/docs/src/components/docs/wrappers.tsx
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { cn } from "@design-intelligence/vessel";
import { cn } from "@design-intelligence/vessel-react";
import { ComponentProps } from "react";

interface SectionWrapperProps extends ComponentProps<"div"> {
Expand Down
19 changes: 18 additions & 1 deletion apps/docs/src/content/docs/cli-reference.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -51,12 +51,29 @@ a finding (exit `1`).

### Initialize: `init`

Scaffold a `.ghost/` package with the steering starter: a manifest, a starter `glossary.md`, a core `index.md` node, and demo nodes for stance, composition, anti-goals, patterns, exemplars, materials, and decisions. The demo content is there for inspiration and guidance. Replace it with real product truth before using it to steer generation. Use `--template minimal` when you only want the small manifest/glossary/index starter. Add truths by adding files (`principle.density.md`). Use
Scaffold a `.ghost/` package. Every template and body includes `anti-goal.median`; the skeleton starter also includes a manifest, a `glossary.md` declaring the grammar/signature/register/anti-goal kinds, a core `index.md`, six grammar nodes of value-free decision logic, and four signature nodes as unanswered dials awaiting your brand's values. The median node is Ghost's measured knowledge of unsteered model behavior — model truth, not brand truth — stamped at init and owned (pruned, adapted) by you thereafter. Nothing in the skeleton is fiction: grammar and the median floor are safe to consume verbatim; the dials tell the agent to ask or flag, never freehand. Use `--template minimal` when you only want the small manifest/glossary/index starter. Add truths by adding files (`principle.density.md`). Use
`--package <dir>` for an exact directory, or set `GHOST_PACKAGE_DIR` when a host
wrapper stores Ghost files outside the default `.ghost`. Core `init` scaffolds
the fingerprint only; pass `--with checks` to also add the checks directory in
one move.

Templates are shapes of emptiness — structures awaiting your truths. A
**body** is the same anatomy inhabited: answered signature dials, a
`materials/` tree (tokens, fonts, worked reference compositions), and its own
`checks/`. Install one with `--body`:

```bash
ghost init --body vessel-light
```

`vessel-light` installs Vessel's design language at full strength — the
fork-axis corpus, `materials/tokens.css` owning every literal value, embedded
fonts, six annotated refs, and five checks, included automatically (no
`--with checks` needed; combining them is an error). The manifest id stays
`vessel-light` until you adapt the starter: renaming it is deliberately the
first step of making the brand yours. `--body` and `--template` are mutually
exclusive.

<CliHelp tool="ghost" command="init" hideDescription />

```bash
Expand Down
16 changes: 14 additions & 2 deletions apps/docs/src/content/docs/getting-started.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ assembles advisory review packets after, but never grades output itself. You
work through a short loop:

```bash
ghost init # scaffold .ghost/ with the steering starter
ghost init # scaffold .ghost/ with the skeleton starter
ghost validate # artifact shape + node validity + kind-prefix check
ghost gather <ask> # emit the menu for this task; your agent selects the truths it needs
ghost pull <ids> # read the selected truths' full bodies
Expand Down Expand Up @@ -80,13 +80,25 @@ by decision. One high-confidence truth beats an empty catalog.

The CLI handles the deterministic package work. Your agent handles the authoring:
interviewing you, working with the material you show it, drafting node prose,
and asking you to curate the claims. `ghost init` scaffolds the steering starter: `manifest.yml`, a starter `glossary.md`, a core `index.md` node, and demo nodes for stance, composition, anti-goals, patterns, exemplars, materials, and decisions. The demo content is there for inspiration and guidance. Replace its claims, paths, examples, and decisions with your real product truth before using it to steer generation. Use `ghost init --template minimal` when you only want the small manifest/glossary/index starter.
and asking you to curate the claims. `ghost init` stamps `anti-goal.median` into every template and body; the median node is Ghost's measured knowledge of unsteered model behavior — model truth, not brand truth — owned (pruned, adapted) by you after init. The skeleton starter also includes `manifest.yml`, a `glossary.md` declaring the grammar/signature/register/anti-goal kinds, a core `index.md`, six grammar nodes of value-free decision logic, and four signature nodes as unanswered dials. Nothing in the skeleton is fiction: grammar and the median floor hold for any brand, and each dial tells the agent to ask you or flag the gap rather than freehand a value. Answering the dials is how the skeleton becomes your brand. Use `ghost init --template minimal` when you only want the small manifest/glossary/index starter.

```bash
ghost init
ghost validate
```

Prefer starting from a working brand instead of an empty anatomy? Install a
**body** — the same skeleton with a real brand's values plugged in: answered
dials, a `materials/` tree with tokens and fonts, worked reference
compositions, and its own checks:

```bash
ghost init --body vessel-light
```

The body's manifest keeps its own id (`vessel-light`) until you adapt it —
renaming the id is deliberately the first step of making the brand yours.

Each node's prose records a durable brand truth. While drafting, ask three
questions of every truth: **why** (the stance — what this brand is, who it
serves, what must remain true), **with what** (the materials — building blocks,
Expand Down
12 changes: 10 additions & 2 deletions apps/docs/src/generated/cli-manifest.json
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
{
"generatedAt": "2026-07-07T16:48:56.039Z",
"generatedAt": "2026-07-09T11:06:22.019Z",
"tools": [
{
"tool": "ghost",
Expand Down Expand Up @@ -53,7 +53,15 @@
{
"rawName": "--template <name>",
"name": "template",
"description": "Init template to scaffold (default: steering)",
"description": "Init template to scaffold (default: skeleton)",
"default": null,
"takesValue": true,
"negated": false
},
{
"rawName": "--body <name>",
"name": "body",
"description": "Init body to install: a full inhabited package (e.g. vessel-light)",
"default": null,
"takesValue": true,
"negated": false
Expand Down
2 changes: 1 addition & 1 deletion apps/docs/src/main.tsx
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import { StrictMode } from "react";
import { createRoot } from "react-dom/client";
import { BrowserRouter } from "react-router";
import "@design-intelligence/vessel/styles.css";
import "@design-intelligence/vessel-react/styles.css";
import { App } from "./App";
import "./styles/dev-fonts.css";

Expand Down
4 changes: 2 additions & 2 deletions biome.json
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
"useIgnoreFile": true
},
"files": {
"includes": ["**", "!**/test/fixtures"]
"includes": ["**", "!**/test/fixtures", "!packages/vessel-light/demo/out"]
},
"formatter": {
"enabled": true,
Expand Down Expand Up @@ -35,7 +35,7 @@
},
"overrides": [
{
"includes": ["packages/vessel/**", "apps/docs/**"],
"includes": ["packages/vessel-react/**", "apps/docs/**"],
"linter": {
"enabled": false
}
Expand Down
1 change: 1 addition & 0 deletions install/manifest.json
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
},
"files": [
"SKILL.md",
"references/adapting-a-starter.md",
"references/authoring-scenarios.md",
"references/blocks.md",
"references/brief.md",
Expand Down
6 changes: 3 additions & 3 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -8,15 +8,15 @@
"node": "^20.19.0 || >=22.12.0"
},
"scripts": {
"build": "tsc --build --force",
"build": "tsc --build --force && pnpm --filter @design-intelligence/ghost build",
"clean": "tsc --build --clean",
"test": "vitest run",
"test:watch": "vitest",
"typecheck": "tsc --build",
"build:ui": "pnpm --filter @design-intelligence/vessel build",
"build:ui": "pnpm --filter @design-intelligence/vessel-react build",
"check": "biome check . && pnpm typecheck && pnpm check:package-bin && pnpm check:packed-package && pnpm check:file-sizes && pnpm check:terminology && pnpm check:docs && pnpm check:install-bundle && pnpm check:release-tarball && pnpm check:release-workflows && pnpm check:cli-manifest",
"check:file-sizes": "node scripts/check-file-sizes.mjs",
"check:packed-package": "node scripts/check-packed-package.mjs",
"check:packed-package": "pnpm --filter @design-intelligence/ghost build && node scripts/check-packed-package.mjs",
"check:package-bin": "chmod +x packages/ghost/dist/bin.js && node scripts/link-package-bin.mjs && node scripts/check-package-bin.mjs",
"check:terminology": "node scripts/check-terminology.mjs",
"check:docs": "node scripts/check-docs-frontmatter.mjs",
Expand Down
2 changes: 1 addition & 1 deletion packages/ghost/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -69,7 +69,7 @@
"provenance": true
},
"scripts": {
"build": "rm -rf dist tsconfig.tsbuildinfo && tsc --build --force && chmod +x dist/bin.js && node ../../scripts/link-package-bin.mjs && cp -r src/skill-bundle dist/skill-bundle",
"build": "rm -rf dist tsconfig.tsbuildinfo && tsc --build --force && chmod +x dist/bin.js && node ../../scripts/link-package-bin.mjs && cp -r src/skill-bundle dist/skill-bundle && node ../../scripts/sync-init-payloads.mjs",
"prepublishOnly": "pnpm build"
},
"dependencies": {
Expand Down
Loading
Loading