@design-intelligence/ghost 0.23.0 → 0.24.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.
- package/README.md +35 -29
- package/dist/commands/checks-command.js +3 -3
- package/dist/commands/checks-command.js.map +1 -1
- package/dist/commands/command-discovery.d.ts.map +1 -1
- package/dist/commands/command-discovery.js +5 -5
- package/dist/commands/command-discovery.js.map +1 -1
- package/dist/commands/export-command.d.ts.map +1 -1
- package/dist/commands/export-command.js +10 -10
- package/dist/commands/export-command.js.map +1 -1
- package/dist/commands/fingerprint-commands.d.ts +2 -2
- package/dist/commands/fingerprint-commands.d.ts.map +1 -1
- package/dist/commands/fingerprint-commands.js +7 -7
- package/dist/commands/fingerprint-commands.js.map +1 -1
- package/dist/commands/gather-command.d.ts.map +1 -1
- package/dist/commands/gather-command.js +82 -19
- package/dist/commands/gather-command.js.map +1 -1
- package/dist/commands/init-command.d.ts.map +1 -1
- package/dist/commands/init-command.js +6 -6
- package/dist/commands/init-command.js.map +1 -1
- package/dist/commands/pull-command.js +18 -8
- package/dist/commands/pull-command.js.map +1 -1
- package/dist/commands/pulse-command.js +6 -6
- package/dist/commands/pulse-command.js.map +1 -1
- package/dist/commands/review-command.js +7 -7
- package/dist/commands/review-command.js.map +1 -1
- package/dist/commands/skill-command.js +2 -2
- package/dist/fingerprint.d.ts +2 -1
- package/dist/fingerprint.d.ts.map +1 -1
- package/dist/fingerprint.js +1 -0
- package/dist/fingerprint.js.map +1 -1
- package/dist/ghost-core/catalog/assemble.d.ts.map +1 -1
- package/dist/ghost-core/catalog/assemble.js +2 -1
- package/dist/ghost-core/catalog/assemble.js.map +1 -1
- package/dist/ghost-core/catalog/menu.d.ts +6 -4
- package/dist/ghost-core/catalog/menu.d.ts.map +1 -1
- package/dist/ghost-core/catalog/menu.js +1 -0
- package/dist/ghost-core/catalog/menu.js.map +1 -1
- package/dist/ghost-core/catalog/types.d.ts +4 -2
- package/dist/ghost-core/catalog/types.d.ts.map +1 -1
- package/dist/ghost-core/check/index.d.ts +1 -1
- package/dist/ghost-core/check/index.js +1 -1
- package/dist/ghost-core/check/lint.d.ts +2 -2
- package/dist/ghost-core/check/lint.js +2 -2
- package/dist/ghost-core/check/load.d.ts +1 -1
- package/dist/ghost-core/check/load.js +3 -3
- package/dist/ghost-core/check/types.d.ts +3 -3
- package/dist/ghost-core/index.d.ts +9 -3
- package/dist/ghost-core/index.d.ts.map +1 -1
- package/dist/ghost-core/index.js +6 -2
- package/dist/ghost-core/index.js.map +1 -1
- package/dist/ghost-core/markdown.d.ts +1 -1
- package/dist/ghost-core/markdown.js +1 -1
- package/dist/ghost-core/node/index.d.ts +1 -1
- package/dist/ghost-core/node/index.d.ts.map +1 -1
- package/dist/ghost-core/node/index.js +1 -1
- package/dist/ghost-core/node/index.js.map +1 -1
- package/dist/ghost-core/node/schema.js +1 -1
- package/dist/ghost-core/node/steering.d.ts +1 -0
- package/dist/ghost-core/node/steering.d.ts.map +1 -1
- package/dist/ghost-core/node/steering.js +4 -1
- package/dist/ghost-core/node/steering.js.map +1 -1
- package/dist/ghost-core/node/types.d.ts +4 -5
- package/dist/ghost-core/node/types.d.ts.map +1 -1
- package/dist/ghost-core/package-manifest.d.ts +23 -13
- package/dist/ghost-core/package-manifest.d.ts.map +1 -1
- package/dist/ghost-core/package-manifest.js +20 -7
- package/dist/ghost-core/package-manifest.js.map +1 -1
- package/dist/ghost-core/skill-bundle-loader.d.ts +1 -1
- package/dist/ghost-core/skill-bundle-loader.js +1 -1
- package/dist/index.d.ts +3 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -1
- package/dist/index.js.map +1 -1
- package/dist/init-payloads/median/cliche.median.md +6 -6
- package/dist/init-payloads/median/median-tells.md +1 -1
- package/dist/init-payloads/skeleton/brand.md +4 -3
- package/dist/init-payloads/skeleton/glossary.md +1 -1
- package/dist/init-payloads/vessel-light/anti-goal.median.md +6 -6
- package/dist/init-payloads/vessel-light/checks/motion-restraint.md +1 -1
- package/dist/init-payloads/vessel-light/manifest.yml +1 -1
- package/dist/init-payloads/vessel-light/materials/ref/composition.form.html +2 -2
- package/dist/init-payloads/vessel-light/materials/ref/composition.overlay.html +3 -3
- package/dist/package.d.ts +7 -0
- package/dist/package.d.ts.map +1 -0
- package/dist/package.js +4 -0
- package/dist/package.js.map +1 -0
- package/dist/review/resolve.js +1 -1
- package/dist/review/resolve.js.map +1 -1
- package/dist/review/review-packet.d.ts +5 -3
- package/dist/review/review-packet.d.ts.map +1 -1
- package/dist/review/review-packet.js +12 -11
- package/dist/review/review-packet.js.map +1 -1
- package/dist/scan/constants.d.ts +6 -2
- package/dist/scan/constants.d.ts.map +1 -1
- package/dist/scan/constants.js +8 -4
- package/dist/scan/constants.js.map +1 -1
- package/dist/scan/file-kind.d.ts +1 -1
- package/dist/scan/file-kind.d.ts.map +1 -1
- package/dist/scan/file-kind.js +11 -11
- package/dist/scan/file-kind.js.map +1 -1
- package/dist/scan/fingerprint-package-lint.d.ts +3 -1
- package/dist/scan/fingerprint-package-lint.d.ts.map +1 -1
- package/dist/scan/fingerprint-package-lint.js +14 -12
- package/dist/scan/fingerprint-package-lint.js.map +1 -1
- package/dist/scan/fingerprint-package-loader.d.ts +7 -3
- package/dist/scan/fingerprint-package-loader.d.ts.map +1 -1
- package/dist/scan/fingerprint-package-loader.js +10 -6
- package/dist/scan/fingerprint-package-loader.js.map +1 -1
- package/dist/scan/fingerprint-package.d.ts +30 -14
- package/dist/scan/fingerprint-package.d.ts.map +1 -1
- package/dist/scan/fingerprint-package.js +17 -9
- package/dist/scan/fingerprint-package.js.map +1 -1
- package/dist/scan/index.d.ts +3 -1
- package/dist/scan/index.d.ts.map +1 -1
- package/dist/scan/index.js +3 -1
- package/dist/scan/index.js.map +1 -1
- package/dist/scan/tarball.d.ts +2 -2
- package/dist/scan/tarball.js +3 -3
- package/dist/scan/tarball.js.map +1 -1
- package/dist/scan/templates.d.ts +1 -1
- package/dist/scan/templates.d.ts.map +1 -1
- package/dist/scan/templates.js +15 -11
- package/dist/scan/templates.js.map +1 -1
- package/dist/skill-bundle/SKILL.md +39 -31
- package/dist/skill-bundle/references/adapting-a-starter.md +11 -11
- package/dist/skill-bundle/references/authoring-scenarios.md +33 -30
- package/dist/skill-bundle/references/blocks.md +19 -20
- package/dist/skill-bundle/references/brief.md +13 -11
- package/dist/skill-bundle/references/capture.md +65 -37
- package/dist/skill-bundle/references/concrete-tiers.md +7 -7
- package/dist/skill-bundle/references/distill.md +204 -0
- package/dist/skill-bundle/references/making.md +113 -0
- package/dist/skill-bundle/references/recall.md +11 -7
- package/dist/skill-bundle/references/schema.md +16 -12
- package/dist/skill-bundle/references/self-check.md +12 -12
- package/dist/skill-bundle/references/steering-audit.md +19 -9
- package/package.json +7 -3
|
@@ -1,19 +1,19 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: authoring-scenarios
|
|
3
|
-
description: Choose the right human-agent workflow for authoring
|
|
3
|
+
description: Choose the right human-agent workflow for authoring ghost packages.
|
|
4
4
|
handoffs:
|
|
5
|
-
- label: Validate the
|
|
5
|
+
- label: Validate the package
|
|
6
6
|
command: ghost validate --format json
|
|
7
|
-
prompt: Classify this
|
|
7
|
+
prompt: Classify this package's authoring scenario and confirm the package validates.
|
|
8
8
|
---
|
|
9
9
|
|
|
10
|
-
# Recipe: Collaborative
|
|
10
|
+
# Recipe: Collaborative Package Authoring
|
|
11
11
|
|
|
12
|
-
**Goal:** help a human and agent co-author durable brand
|
|
12
|
+
**Goal:** help a human and agent co-author durable brand guidance through
|
|
13
13
|
conversation — without laundering what a codebase happens to do into what the
|
|
14
14
|
brand means.
|
|
15
15
|
|
|
16
|
-
The
|
|
16
|
+
The ghost package is medium-agnostic and is not derived from a repo. Its raw
|
|
17
17
|
material is **elicitation**: what the human says, shows, and points at — words,
|
|
18
18
|
screenshots, links, exemplar products, marketing copy, a competitor they define
|
|
19
19
|
themselves against. Agent synthesis is draft work until the human curates it
|
|
@@ -22,15 +22,15 @@ and ordinary Git review accepts it.
|
|
|
22
22
|
Repo-bound reality — components, tokens, paths, building blocks — can be
|
|
23
23
|
recorded as `materials` on the node whose prose explains their purpose. When a
|
|
24
24
|
conversation surfaces "we have a component for that," treat it as material to
|
|
25
|
-
locate and interpret, not as brand
|
|
25
|
+
locate and interpret, not as brand guidance on its own.
|
|
26
26
|
|
|
27
27
|
## 1. Start With One Repeated Decision
|
|
28
28
|
|
|
29
|
-
Do not try to
|
|
29
|
+
Do not try to capture the whole brand at once. Ask the human for the one
|
|
30
30
|
decision whose feedback keeps repeating — the checkout always flagged for
|
|
31
31
|
trust, the voice always re-toned, the empty state always rewritten — and
|
|
32
|
-
capture that one
|
|
33
|
-
empty catalog; the
|
|
32
|
+
capture that one decision as a node first. One well-grounded node beats an
|
|
33
|
+
empty catalog; the package grows as the next repeated decision shows up.
|
|
34
34
|
|
|
35
35
|
The scenario below tunes the authoring *posture* for that first node; it is not
|
|
36
36
|
a gate to clear before writing anything.
|
|
@@ -38,19 +38,22 @@ a gate to clear before writing anything.
|
|
|
38
38
|
| Scenario | Default authoring posture |
|
|
39
39
|
| --- | --- |
|
|
40
40
|
| Net new brand | Stance-first. Elicit feel, audience, and early anti-goals before anything else exists to point at. |
|
|
41
|
-
| Established brand, first
|
|
41
|
+
| Established brand, first ghost package | Artifact-rich interview. The human can show a lot — shipped surfaces, brand docs, campaigns. Elicit which of it is *intentional*. |
|
|
42
42
|
| Strong opinions, weak articulation | Example-led. The human knows it when they see it: work from exemplars and counter-exemplars ("this feels like us, this never would") toward the stance underneath. |
|
|
43
|
-
| Brand doc or design-language deck exists | Distillation.
|
|
43
|
+
| Brand doc or design-language deck exists | Distillation. Treat the document as evidence: pull the claims that actually steer decisions, drop the aspirational filler, and have the human ratify each survivor. |
|
|
44
44
|
| Rebrand, redesign, migration | Transition-led. Capture current, target, and what must not be lost in between. |
|
|
45
|
-
| Fork, white label, tenant variant | Shared base + local divergence. Keep
|
|
45
|
+
| Fork, white label, tenant variant | Shared base + local divergence. Keep shared guidance broad; scope divergence with conditions. |
|
|
46
46
|
| Monorepo or product suite | One contract per package. |
|
|
47
47
|
|
|
48
|
+
When supplied artifacts are the starting point or must be reconciled with an
|
|
49
|
+
existing package, follow [distill.md](distill.md).
|
|
50
|
+
|
|
48
51
|
If more than one applies, start with the broad scenario, then narrow.
|
|
49
52
|
|
|
50
53
|
## 2. Interview The Human
|
|
51
54
|
|
|
52
55
|
The interview is the engine. Ask only high-leverage questions that change the
|
|
53
|
-
|
|
56
|
+
guidance:
|
|
54
57
|
|
|
55
58
|
- What should this brand feel like, and what should it never become? (The
|
|
56
59
|
"never become" answers are anti-goal nodes — capture them with the same care
|
|
@@ -63,7 +66,7 @@ fingerprint:
|
|
|
63
66
|
- What keeps getting flagged in review, re-toned, or rewritten?
|
|
64
67
|
- Where do trust, density, pacing, accessibility, recovery, or disclosure
|
|
65
68
|
matter most?
|
|
66
|
-
- Which
|
|
69
|
+
- Which guidance is universal, and which guidance holds only under a specific situation?
|
|
67
70
|
|
|
68
71
|
Capture human-authored or human-approved answers as nodes. Do not treat
|
|
69
72
|
unapproved notes as canonical.
|
|
@@ -73,7 +76,7 @@ unapproved notes as canonical.
|
|
|
73
76
|
Ask for artifacts and read them closely: screenshots, links, exemplar products,
|
|
74
77
|
brand docs, marketing copy, past campaigns, a rejected design and why it was
|
|
75
78
|
rejected. Treat every artifact as *testimony* — evidence of a stance the human
|
|
76
|
-
holds — never as
|
|
79
|
+
holds — never as guidance by itself. A pattern that appears everywhere may be
|
|
77
80
|
legacy; a pattern that appears once may be the brand at its best. The human
|
|
78
81
|
says which.
|
|
79
82
|
|
|
@@ -85,15 +88,15 @@ and enforced in review, not repeated as the model's main example.
|
|
|
85
88
|
|
|
86
89
|
## 4. Draft The Nodes
|
|
87
90
|
|
|
88
|
-
Write the smallest useful set of nodes, each
|
|
91
|
+
Write the smallest useful set of nodes, each carrying purpose-coherent prose guidance with
|
|
89
92
|
a one-line `description`, named `<kind>.<slug>.md` (or a bare slug when no kind is present). Ask three questions of each node body: why (the stance), with what
|
|
90
93
|
(the materials), and how it is assembled (the patterns). These are drafting
|
|
91
94
|
prompts, not fields.
|
|
92
95
|
|
|
93
|
-
Draft only what the human said or showed. State universal
|
|
94
|
-
narrower
|
|
96
|
+
Draft only what the human said or showed. State universal guidance plainly; give
|
|
97
|
+
narrower guidance a **condition** in the prose — the situation they apply in,
|
|
95
98
|
never a destination. Label uncertain reasoning as provisional. Prefer a few
|
|
96
|
-
|
|
99
|
+
focused guidance over a broad catalog. Hold draft prose to the node prose
|
|
97
100
|
stances in [capture.md](capture.md) and score each node against its drafting
|
|
98
101
|
gate before presenting drafts for curation.
|
|
99
102
|
|
|
@@ -103,7 +106,7 @@ Before treating draft content as durable, ask the human to classify important
|
|
|
103
106
|
claims:
|
|
104
107
|
|
|
105
108
|
- keep as canonical
|
|
106
|
-
- soften
|
|
109
|
+
- soften the guidance
|
|
107
110
|
- reject as accidental or legacy
|
|
108
111
|
- move to scratch notes
|
|
109
112
|
- restate at a broader or narrower altitude (add or drop a condition)
|
|
@@ -115,10 +118,10 @@ Two authoring decisions replace any notion of hierarchy:
|
|
|
115
118
|
- **Kind** — declare the kind vocabulary in `glossary.md` and name each node
|
|
116
119
|
`<kind>.<slug>.md` so its normative weight is clear. The glossary defines what
|
|
117
120
|
each kind means and how strongly it binds. Kinds are your choice;
|
|
118
|
-
|
|
119
|
-
- **Altitude** — state
|
|
121
|
+
ghost ships no fixed vocabulary.
|
|
122
|
+
- **Altitude** — state guidance at the level where it applies. Universal → state
|
|
120
123
|
it plainly. Narrower → name the situation that activates it, in the prose. Never
|
|
121
|
-
file a
|
|
124
|
+
file a node by destination (`for-emails.md`); the model reads the condition and
|
|
122
125
|
decides when it applies.
|
|
123
126
|
|
|
124
127
|
## 7. Validate And Ratify
|
|
@@ -137,7 +140,7 @@ edits are drafts; checked-in nodes are canonical.
|
|
|
137
140
|
The shapes below teach what steering prose looks like when it works. The
|
|
138
141
|
examples use **Morrow Ledger**, a fictional bookkeeping product — teaching
|
|
139
142
|
fiction for this recipe only, never content for a real corpus. Each shape is a
|
|
140
|
-
pattern to imitate with the human's real
|
|
143
|
+
pattern to imitate with the human's real guidance.
|
|
141
144
|
|
|
142
145
|
- **Stance as forced choices.** Not adjectives — decisions under pressure:
|
|
143
146
|
"Clarity beats momentum: write '3 invoices are 14+ days late', not 'Cash
|
|
@@ -160,25 +163,25 @@ pattern to imitate with the human's real truths.
|
|
|
160
163
|
teaches its accidents as brand.
|
|
161
164
|
- **Material inventory.** `materials` locates; prose explains meaning:
|
|
162
165
|
"`src/styles/tokens.css` should define the ink, ledger, amber, and paper
|
|
163
|
-
colors." Never duplicate API docs unless the API itself is the brand
|
|
166
|
+
colors." Never duplicate API docs unless the API itself is the brand guidance.
|
|
164
167
|
- **Decision trace.** A worked tradeoff with the reversal condition: "We chose
|
|
165
168
|
visible evidence over shorter surfaces… Reverses when the evidence would
|
|
166
169
|
expose sensitive third-party details — then show the count only." Models
|
|
167
170
|
imitate reasoning as well as outputs.
|
|
168
171
|
|
|
169
172
|
State the silence posture on the manifest-declared cover, which `gather`
|
|
170
|
-
inlines for every task: when the
|
|
173
|
+
inlines for every task: when the package is silent, proceed provisionally
|
|
171
174
|
from local conventions only when safe, and ask before brand-defining,
|
|
172
175
|
irreversible, legal, privacy-sensitive, or high-risk choices.
|
|
173
176
|
|
|
174
177
|
## Never
|
|
175
178
|
|
|
176
|
-
- Never derive brand
|
|
179
|
+
- Never derive brand guidance from repo code alone; what the codebase repeats may
|
|
177
180
|
be legacy, not stance. Use repo paths as `materials` only after the prose
|
|
178
|
-
|
|
181
|
+
guidance has been curated.
|
|
179
182
|
- Never draft a node the human neither said nor showed; that is invention
|
|
180
183
|
wearing the brand's clothes.
|
|
181
184
|
- Never treat a brand doc, an artifact, or repetition frequency as brand
|
|
182
185
|
authority; the human ratifies what is intentional.
|
|
183
186
|
- Never invent a hierarchy, inheritance, or edges — the package is flat.
|
|
184
|
-
- Never file a
|
|
187
|
+
- Never file a node by destination; state its condition in the prose.
|
|
@@ -1,21 +1,21 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: blocks
|
|
3
|
-
description: Author block and material nodes so an agent can match a
|
|
3
|
+
description: Author block and material nodes so an agent can match a ghost package's stance to concrete building blocks.
|
|
4
4
|
handoffs:
|
|
5
5
|
- label: List the node menu
|
|
6
6
|
command: ghost gather
|
|
7
|
-
prompt: What materials does this
|
|
7
|
+
prompt: What materials does this package document, and what is absent?
|
|
8
8
|
---
|
|
9
9
|
|
|
10
10
|
# Recipe: Author Block And Material Nodes
|
|
11
11
|
|
|
12
12
|
**Goal:** when you are documenting the **materials** a brand draws from — its
|
|
13
13
|
building blocks, assets, and reusable pieces — write that prose so an agent can
|
|
14
|
-
translate the
|
|
15
|
-
|
|
14
|
+
translate the package's stance into concrete building blocks without the
|
|
15
|
+
guidance ever naming a component.
|
|
16
16
|
|
|
17
17
|
This is opinionated method, not new schema. **"Block node" is shorthand in this
|
|
18
|
-
recipe, not a
|
|
18
|
+
recipe, not a ghost concept**: it means any node whose guidance is a reusable
|
|
19
19
|
building block, whatever kind the author's glossary declares for it (`block`,
|
|
20
20
|
`asset`, `pattern`, …). A block node is a node like any other: a markdown file
|
|
21
21
|
with a `description` and a prose body, named `<kind>.<slug>.md` (or a bare
|
|
@@ -25,12 +25,11 @@ whatever keeps each node purpose-coherent.
|
|
|
25
25
|
|
|
26
26
|
## Where it sits
|
|
27
27
|
|
|
28
|
-
A
|
|
29
|
-
concrete materials
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
The agent does the matching.
|
|
28
|
+
A ghost package declares stance. Block and material nodes ground that stance in
|
|
29
|
+
concrete material: materials, substantial fenced examples, or Skeletons. A
|
|
30
|
+
realizing agent **reads** them and matches against them. Strip every block node
|
|
31
|
+
and the package is still valid — it just gives the agent less to draw on,
|
|
32
|
+
and prose-only steering is weak steering. The agent does the matching.
|
|
34
33
|
|
|
35
34
|
## Concreteness is the grounding dial
|
|
36
35
|
|
|
@@ -51,7 +50,7 @@ Neither is correct. A concrete block node is a deliberate trade, not a leak.
|
|
|
51
50
|
the absence of a body is the signal that training priors are acceptable here.
|
|
52
51
|
When a primitive is itself brand-distinctive (a button whose shape, weight, or
|
|
53
52
|
focus treatment is a recognizable brand move), its *divergence from the
|
|
54
|
-
generic form* is a
|
|
53
|
+
generic form* is a decision worth a node: state what differs and why, not the
|
|
55
54
|
full API.
|
|
56
55
|
- **Anything that encodes a user moment** (confirmation, plan, task, tool,
|
|
57
56
|
reasoning, sources…) earns **one short prose body**. This is what the method is
|
|
@@ -85,15 +84,15 @@ when (use X instead) / never*:
|
|
|
85
84
|
|
|
86
85
|
Keep props, markup, and API reference out; the body documents purpose, and the
|
|
87
86
|
implementation beneath it is swappable. Explicit values are the exception when
|
|
88
|
-
the value itself is the brand
|
|
87
|
+
the value itself is the brand guidance — an exact color, a specific corner radius —
|
|
89
88
|
not a swappable implementation detail.
|
|
90
89
|
|
|
91
90
|
## How a match runs
|
|
92
91
|
|
|
93
|
-
The agent reads the
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
92
|
+
The agent reads the package's stance, `gather`s the menu, pulls block nodes
|
|
93
|
+
whose descriptions apply, separates near-neighbors on *not when* and *never*,
|
|
94
|
+
and assembles. The realizing surface authors the chosen blocks in its medium.
|
|
95
|
+
The guidance never named a component; the agent bridged via documented
|
|
97
96
|
purpose.
|
|
98
97
|
|
|
99
98
|
## Curation rule
|
|
@@ -156,7 +155,7 @@ divergence from the generic form would earn a short body.)
|
|
|
156
155
|
## Materials: bundle brand-owned materials, reference implementations
|
|
157
156
|
|
|
158
157
|
Use the rule of thumb literally. Bundle brand-owned materials: brand-owned artifacts that
|
|
159
|
-
should travel with the
|
|
158
|
+
should travel with the package and survive export or refactors — tokens.css,
|
|
160
159
|
motion.json, logo.svg, type materials. Reference implementations: living app
|
|
161
160
|
code, components, stories, or tests whose home is still the product repo. The
|
|
162
161
|
`materials` list locates both; the prose says what the material proves.
|
|
@@ -174,7 +173,7 @@ prop APIs re-imports implementation opinion and creates a mirror to maintain.
|
|
|
174
173
|
of a body is the signal. A brand-distinctive primitive earns a body for its
|
|
175
174
|
divergence, never for its API.
|
|
176
175
|
- Never put props, markup, or API reference in a block body; explicit
|
|
177
|
-
values belong only when the value itself is the brand
|
|
178
|
-
- Never let the
|
|
176
|
+
values belong only when the value itself is the brand guidance.
|
|
177
|
+
- Never let the package reference the realizing surface; blocks are read,
|
|
179
178
|
not addressed.
|
|
180
179
|
- Never split two blocks that answer the same first question; that is one node.
|
|
@@ -1,20 +1,22 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: brief
|
|
3
|
-
description: Build a compact pre-generation packet from pulled
|
|
3
|
+
description: Build a compact pre-generation packet from pulled ghost guidance.
|
|
4
4
|
---
|
|
5
5
|
|
|
6
|
-
# Recipe: Brief Work From
|
|
6
|
+
# Recipe: Brief Work From ghost Package
|
|
7
7
|
|
|
8
8
|
A brief is an ephemeral steering packet for the generating pass. It is not a new
|
|
9
9
|
schema and is never written back into `.ghost/`.
|
|
10
10
|
|
|
11
11
|
1. Run `ghost gather <ask> --format json` and select against descriptions.
|
|
12
|
-
2. The cover is already in context
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
12
|
+
2. The cover is already in context and outside selection. Pull every applicable
|
|
13
|
+
node with `ghost pull <id> [<id>…]`; skip nodes whose stated situation does
|
|
14
|
+
not apply. Topic overlap alone is not applicability.
|
|
15
|
+
3. Note gather payload labels where present: `materials`, substantial fenced
|
|
16
|
+
examples, or a `## Skeleton`. If there is no concrete material for this
|
|
17
|
+
surface, the readiness ceiling is **Yellow**.
|
|
18
|
+
4. If no node applies, name the package's silence, follow the cover silence
|
|
19
|
+
posture, and keep provisional reasoning separate from ghost-backed claims.
|
|
18
20
|
|
|
19
21
|
## The packet: five sections only
|
|
20
22
|
|
|
@@ -34,14 +36,14 @@ Return this shape:
|
|
|
34
36
|
- matching pulled Skeleton, or "none pulled"
|
|
35
37
|
|
|
36
38
|
## Silent / provisional
|
|
37
|
-
- what
|
|
39
|
+
- what ghost does not cover and what local evidence carries
|
|
38
40
|
```
|
|
39
41
|
|
|
40
42
|
Rules:
|
|
41
43
|
|
|
42
44
|
- Do not add sections for every kind. Sections dilute instruction weight.
|
|
43
|
-
- Treat `ghost pull` ordering as
|
|
44
|
-
prose rules, Skeletons dead last.
|
|
45
|
+
- Treat `ghost pull` ordering as packet structure: stance first, concrete-material
|
|
46
|
+
nodes next, prose rules, Skeletons dead last.
|
|
45
47
|
- If a pulled Skeleton matches the surface, begin the artifact from it verbatim
|
|
46
48
|
before filling.
|
|
47
49
|
- Anti-goals are review-critical: state the positive replacement, not just the
|
|
@@ -1,26 +1,26 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: capture
|
|
3
|
-
description: Author repo-local
|
|
3
|
+
description: Author repo-local ghost packages as a flat set of prose nodes.
|
|
4
4
|
handoffs:
|
|
5
5
|
- label: Inspect the package
|
|
6
6
|
command: ghost validate
|
|
7
|
-
prompt: Does this
|
|
7
|
+
prompt: Does this ghost package validate, and what is absent?
|
|
8
8
|
---
|
|
9
9
|
|
|
10
|
-
# Recipe: Author
|
|
10
|
+
# Recipe: Author ghost Package
|
|
11
11
|
|
|
12
|
-
**Goal:** record durable brand
|
|
12
|
+
**Goal:** record durable brand guidance in `.ghost/` as a flat set of prose
|
|
13
13
|
**nodes**. If a change is uncommitted, it is draft work. If it is checked in,
|
|
14
|
-
|
|
14
|
+
ghost treats the `.ghost/` package as canonical.
|
|
15
15
|
|
|
16
16
|
```text
|
|
17
17
|
.ghost/
|
|
18
18
|
manifest.yml # schema + id
|
|
19
19
|
glossary.md # the kind vocabulary + what each kind means
|
|
20
|
-
principle.trust.md #
|
|
20
|
+
principle.trust.md # guidance of kind `principle`
|
|
21
21
|
pattern.invoice.md # a pattern with an optional ## Skeleton
|
|
22
22
|
anti-goal.generic.md # a review-critical replacement rule
|
|
23
|
-
voice.md #
|
|
23
|
+
voice.md # guidance without a kind
|
|
24
24
|
```
|
|
25
25
|
|
|
26
26
|
A **node** is a markdown file: a `description`, optional `materials`, and a
|
|
@@ -68,6 +68,30 @@ The annotation is load-bearing. A bare sample teaches form; the annotation
|
|
|
68
68
|
teaches which features of the form are intentional, which stops an agent from
|
|
69
69
|
copying incidental details.
|
|
70
70
|
|
|
71
|
+
An exemplar should identify eight things in prose:
|
|
72
|
+
|
|
73
|
+
1. the rendered artifact the agent should inspect;
|
|
74
|
+
2. the implementation, fixture, or source that produced it;
|
|
75
|
+
3. what is intentional and load-bearing;
|
|
76
|
+
4. what is incidental and should change with task facts;
|
|
77
|
+
5. the observable conditions where it applies;
|
|
78
|
+
6. the content, viewport, or state conditions that challenge or break it;
|
|
79
|
+
7. the current materials it demonstrates;
|
|
80
|
+
8. provenance, owner, review date, or compatibility signal when freshness
|
|
81
|
+
matters.
|
|
82
|
+
|
|
83
|
+
Put locators in `materials`: render, implementation, assets, source, or external
|
|
84
|
+
reference. Put interpretation in the body. Ownership and freshness also live in
|
|
85
|
+
prose, the exemplar artifact, or a repo-owned system; they are not structured
|
|
86
|
+
`materials` metadata.
|
|
87
|
+
|
|
88
|
+
A rendered exemplar proves one solution under stated conditions. It is not a
|
|
89
|
+
universal visual target. Provide one exemplar for each distinct,
|
|
90
|
+
composition-critical surface shape that earns one, and say which details may be
|
|
91
|
+
reused. If unrelated tasks start converging on the same composition, section
|
|
92
|
+
order, or decoration, tighten applicability, add a shape-appropriate exemplar,
|
|
93
|
+
or remove the exemplar.
|
|
94
|
+
|
|
71
95
|
Protect exact voice artifacts the same way. A real on-brand error message
|
|
72
96
|
out-steers a paragraph about error-message voice:
|
|
73
97
|
|
|
@@ -177,21 +201,25 @@ Near the moment of payment, reduce felt risk. Proximity of reassurance to the
|
|
|
177
201
|
action beats completeness...
|
|
178
202
|
```
|
|
179
203
|
|
|
180
|
-
- **`description`** is how an agent finds the node: a
|
|
181
|
-
|
|
182
|
-
|
|
204
|
+
- **`description`** is how an agent finds the node: a compact retrieval payload
|
|
205
|
+
naming what the node governs, the observable condition under which it applies,
|
|
206
|
+
and what it contributes when useful. `ghost gather` emits id, kind,
|
|
207
|
+
description, concrete coverage, payload labels, and material count; the agent matches the ask
|
|
208
|
+
against applicability.
|
|
183
209
|
- **Kind is the filename prefix** and must be a kind the glossary declares. A
|
|
184
210
|
bare name (`voice.md`) has no kind.
|
|
185
|
-
- **Altitude lives in the prose.** State
|
|
186
|
-
narrower
|
|
187
|
-
|
|
211
|
+
- **Altitude lives in the prose.** State universal guidance plainly; give a
|
|
212
|
+
narrower guidance a **condition** — the situation it applies in — in the prose
|
|
213
|
+
and usually in the description. Do not use broad universal imperatives unless
|
|
214
|
+
universal retrieval is intended. Never file a node by destination
|
|
215
|
+
(`for-emails.md`).
|
|
188
216
|
- **Concreteness is derived.** A node carries concrete material when it has
|
|
189
217
|
`materials`, a substantial fenced example, or a `## Skeleton`. You do not
|
|
190
218
|
declare a separate type.
|
|
191
219
|
|
|
192
220
|
## What a node body answers
|
|
193
221
|
|
|
194
|
-
While drafting, ask three questions of every
|
|
222
|
+
While drafting, ask three questions of every node — *why* (the stance), *with
|
|
195
223
|
what* (the materials), and *how it is assembled* (the patterns). These are
|
|
196
224
|
drafting prompts, never frontmatter keys, node types, or required sections, and
|
|
197
225
|
a node may answer only one. Each answer lands as a steering dimension the
|
|
@@ -200,15 +228,15 @@ machinery already scores:
|
|
|
200
228
|
- **why** lands as stance prose — read first in `ghost pull`, weakest at
|
|
201
229
|
moving output form on its own; it is the yardstick every later selection is
|
|
202
230
|
measured against.
|
|
203
|
-
- **with what** lands as `materials` and concreteness —
|
|
204
|
-
and `ghost review` matching. See [blocks.md](blocks.md) for authoring
|
|
231
|
+
- **with what** lands as `materials` and concreteness — affects pull packet
|
|
232
|
+
order and `ghost review` matching. See [blocks.md](blocks.md) for authoring
|
|
205
233
|
material-backed nodes.
|
|
206
234
|
- **how it is assembled** lands as patterns and `## Skeleton` sections — the
|
|
207
235
|
strongest steering; Skeleton fences are extracted and emitted dead last so
|
|
208
236
|
generation starts from them.
|
|
209
237
|
|
|
210
|
-
Keep a node **purpose-coherent**: one
|
|
211
|
-
|
|
238
|
+
Keep a node **purpose-coherent**: one coherent decision, any length. Split only when it
|
|
239
|
+
contains a separate decision with different applicability.
|
|
212
240
|
|
|
213
241
|
## Node prose stances
|
|
214
242
|
|
|
@@ -228,7 +256,7 @@ Two carve-outs come first, because they invert ordinary prose advice:
|
|
|
228
256
|
Everywhere else:
|
|
229
257
|
|
|
230
258
|
- **No aspirational abstractions.** "We value clarity and trust" steers
|
|
231
|
-
nothing. Name the decision the
|
|
259
|
+
nothing. Name the decision the guidance forces: what gets picked when two goods
|
|
232
260
|
compete, and what gets given up.
|
|
233
261
|
- **Descriptions must discriminate.** Read the description alone. If it also
|
|
234
262
|
fits a competitor's brand, it is retrieval-dead; rewrite it until it could
|
|
@@ -239,7 +267,7 @@ Everywhere else:
|
|
|
239
267
|
- **Ban brand-deck filler.** "Elevate," "delight," "seamless," "best-in-class,"
|
|
240
268
|
"empower." When a brand doc supplies these words, they are testimony to
|
|
241
269
|
distill, never prose to keep.
|
|
242
|
-
- **Settle the altitude on purpose.** Every
|
|
270
|
+
- **Settle the altitude on purpose.** Every node is either claimed universal
|
|
243
271
|
or given its condition in the prose. A node body that does neither was never
|
|
244
272
|
curated for altitude; ask the human which it is.
|
|
245
273
|
|
|
@@ -262,12 +290,12 @@ in curation still decides what becomes canonical.
|
|
|
262
290
|
|
|
263
291
|
## Author through steering jobs
|
|
264
292
|
|
|
265
|
-
The steering jobs are questions, not mandatory fields. Encode the
|
|
293
|
+
The steering jobs are questions, not mandatory fields. Encode the guidance in the
|
|
266
294
|
strongest form that fixes the observed failure.
|
|
267
295
|
|
|
268
296
|
| If the agent keeps... | Author... |
|
|
269
297
|
| --- | --- |
|
|
270
|
-
| missing the
|
|
298
|
+
| missing the guidance | sharper `description`; move universal guidance to the cover |
|
|
271
299
|
| inventing values | `asset.*` node with materials and exact names |
|
|
272
300
|
| producing generic output | `anti-goal.*` replacement plus annotated `exemplar.*` |
|
|
273
301
|
| choosing the wrong structure | `pattern.*` with bound/open and a `## Skeleton` |
|
|
@@ -278,11 +306,11 @@ strongest form that fixes the observed failure.
|
|
|
278
306
|
|
|
279
307
|
A `concept.*` node holds a one-time creative move — a launch hook, a
|
|
280
308
|
campaign idea, a specific non-median leap the corpus would not have produced
|
|
281
|
-
by recombining its other
|
|
309
|
+
by recombining its other guidance. Scope it explicitly to the task or surface
|
|
282
310
|
it was written for, keep it distinct from invariants, and do not generalize
|
|
283
311
|
it into permanent brand law. If it proves reusable later, promote it into an
|
|
284
312
|
exemplar or pattern deliberately; do not let a one-off default into durable
|
|
285
|
-
|
|
313
|
+
guidance through accumulation.
|
|
286
314
|
|
|
287
315
|
Ask while authoring:
|
|
288
316
|
|
|
@@ -301,7 +329,7 @@ Ask while authoring:
|
|
|
301
329
|
|
|
302
330
|
Decide which posture fits before scaffolding. Follow
|
|
303
331
|
[authoring-scenarios.md](authoring-scenarios.md) when setting up or substantially
|
|
304
|
-
revising a
|
|
332
|
+
revising a ghost package. Human intent anchors the guidance; what the human says and
|
|
305
333
|
shows — words, images, links, exemplars — is the evidence; agent synthesis is
|
|
306
334
|
draft work until a human curates it and Git review accepts it.
|
|
307
335
|
|
|
@@ -316,12 +344,12 @@ ghost validate
|
|
|
316
344
|
|
|
317
345
|
`ghost init` seeds the skeleton starter: the manifest, a starter
|
|
318
346
|
`glossary.md`, a `brand.md` cover, foundation chapters with open questions, and
|
|
319
|
-
the model cliche floor. Replace open questions with real product
|
|
347
|
+
the model cliche floor. Replace open questions with real product guidance before
|
|
320
348
|
using it to steer generation. Use `ghost init --template minimal` for a
|
|
321
349
|
manifest, glossary, cover, and cliche floor.
|
|
322
350
|
|
|
323
351
|
Write the manifest-declared cover as the human-curated front door:
|
|
324
|
-
non-negotiables that apply to every task, what the
|
|
352
|
+
non-negotiables that apply to every task, what the package covers, and any
|
|
325
353
|
stricter silence posture. `ghost gather` inlines it before the menu, so anything
|
|
326
354
|
that must never be missed belongs there.
|
|
327
355
|
|
|
@@ -336,7 +364,7 @@ feed-back only; they are never gathered.
|
|
|
336
364
|
|
|
337
365
|
Declare the kinds you will use in `glossary.md` — the frontmatter `kinds` list
|
|
338
366
|
plus a `#` section per kind explaining its meaning and normative weight. Kinds
|
|
339
|
-
are your choice;
|
|
367
|
+
are your choice; ghost ships no fixed vocabulary. A node's filename prefix must
|
|
340
368
|
match a declared kind (or the node has no kind).
|
|
341
369
|
|
|
342
370
|
The glossary is a dictionary of every term with defined meaning in the corpus.
|
|
@@ -349,17 +377,17 @@ hygiene, not over-structure.
|
|
|
349
377
|
Elicit the brand from the human, not from a codebase. Interview for stance,
|
|
350
378
|
audience, anti-goals, and exemplars; ask for the material they can show —
|
|
351
379
|
screenshots, links, exemplar products, brand docs, copy they love or hate. Treat
|
|
352
|
-
every artifact as
|
|
353
|
-
|
|
354
|
-
|
|
380
|
+
every artifact as evidence to curate, never guidance to copy verbatim. When
|
|
381
|
+
supplied artifacts are the starting point or must be reconciled with existing
|
|
382
|
+
guidance, follow [distill.md](distill.md). Repo-bound reality can be recorded as
|
|
383
|
+
`materials` on the node whose prose explains its purpose.
|
|
355
384
|
|
|
356
385
|
### 5. Write sparse nodes
|
|
357
386
|
|
|
358
|
-
Add the smallest useful set of nodes, each
|
|
387
|
+
Add the smallest useful set of nodes, each carrying purpose-coherent prose guidance
|
|
359
388
|
answering why, with what, or how it is assembled, named `<kind>.<slug>.md` or a
|
|
360
389
|
bare slug. Draft only what the
|
|
361
|
-
human said or showed. State conditions as situations in the prose. Prefer a
|
|
362
|
-
high-confidence truths over a noisy catalog. Hold each draft to the node prose
|
|
390
|
+
human said or showed. State conditions as situations in the prose. Prefer a small amount of focused, well-grounded guidance over a noisy catalog. Hold each draft to the node prose
|
|
363
391
|
stances and score it before curation; a node below the gate returns to the
|
|
364
392
|
interview. Ask the human to keep, soften,
|
|
365
393
|
reject, or re-title important claims before treating draft nodes as durable.
|
|
@@ -377,12 +405,12 @@ Undeclared kind prefixes and malformed Skeleton sections are warnings.
|
|
|
377
405
|
## Never
|
|
378
406
|
|
|
379
407
|
- Never describe any file outside `.ghost/` as canonical package input.
|
|
380
|
-
- Never derive
|
|
381
|
-
be legacy, not stance. Use repo paths as `materials` only when the prose
|
|
408
|
+
- Never derive brand guidance from repo code alone; what a codebase repeats may
|
|
409
|
+
be legacy, not stance. Use repo paths as `materials` only when the prose guidance
|
|
382
410
|
has been curated.
|
|
383
411
|
- Never draft a node the human neither said nor showed.
|
|
384
412
|
- Never invent a hierarchy, inheritance, or cross-node edges — the package is
|
|
385
413
|
flat.
|
|
386
|
-
- Never file a
|
|
414
|
+
- Never file a node by destination; state its condition in the prose.
|
|
387
415
|
- Never ship a blacklist-only anti-goal; state the replacement and enforce the
|
|
388
416
|
hard line in review.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: concrete-tiers
|
|
3
|
-
description: Decide which concrete code tiers a
|
|
3
|
+
description: Decide which concrete code tiers a ghost package carries — tokens, skeletons, components, exemplars — and justify every absence.
|
|
4
4
|
handoffs:
|
|
5
5
|
- label: Audit what the package carries today
|
|
6
6
|
command: ghost gather
|
|
@@ -10,10 +10,10 @@ handoffs:
|
|
|
10
10
|
# Recipe: Choose The Concrete Code Tiers
|
|
11
11
|
|
|
12
12
|
**Goal:** decide, deliberately, which tiers of concrete code material a
|
|
13
|
-
|
|
13
|
+
package carries — and be able to say why any tier is absent. Absence
|
|
14
14
|
should be a decision, not a default.
|
|
15
15
|
|
|
16
|
-
Prose states
|
|
16
|
+
Prose states guidance; concrete code makes it the cheapest continuation. A
|
|
17
17
|
package can carry code at four tiers, and each does a different job during
|
|
18
18
|
generation:
|
|
19
19
|
|
|
@@ -30,7 +30,7 @@ Two properties decide whether a tier steers, and they are not the same thing:
|
|
|
30
30
|
skeleton one block, an exemplar one whole surface.
|
|
31
31
|
- **Delivery** — whether the material is guaranteed to reach the agent.
|
|
32
32
|
Skeleton blocks live in node bodies, so `ghost pull` delivers them with the
|
|
33
|
-
|
|
33
|
+
guidance. Files behind `materials:` locators reach only agents that spend a
|
|
34
34
|
turn reading them. A tier the agent never sees contributes nothing;
|
|
35
35
|
presence in the package is not presence in context.
|
|
36
36
|
|
|
@@ -57,15 +57,15 @@ The other three tiers are earned by the package's shape:
|
|
|
57
57
|
|
|
58
58
|
## Every tier is a copy that can drift
|
|
59
59
|
|
|
60
|
-
Each tier repeats the token
|
|
60
|
+
Each tier repeats the token decision, and a stale copy steers harder than the
|
|
61
61
|
prose that corrects it. A hardcoded value in an exemplar where a token
|
|
62
62
|
exists is a lie waiting for a rename. Before adding a tier, accept its
|
|
63
63
|
maintenance bill; after any token change, sweep every tier for stranded
|
|
64
64
|
literals.
|
|
65
65
|
|
|
66
|
-
A tier can also fight the package's stance. A package whose
|
|
66
|
+
A tier can also fight the package's stance. A package whose guidance is
|
|
67
67
|
"compose each surface fresh from the tokens" contradicts itself by shipping
|
|
68
|
-
a component kit; a package whose
|
|
68
|
+
a component kit; a package whose guidance is "compose from the grammar, the
|
|
69
69
|
refs are examples not a framework" hardens toward template convergence if
|
|
70
70
|
every pattern carries a mandatory skeleton. When a tier and the stance
|
|
71
71
|
conflict, the stance wins — that absence is the package expressing itself.
|