@design-intelligence/ghost 0.20.0 → 0.22.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 +47 -33
- package/dist/commands/checks-command.d.ts.map +1 -1
- package/dist/commands/checks-command.js +8 -1
- package/dist/commands/checks-command.js.map +1 -1
- package/dist/commands/fingerprint-commands.d.ts.map +1 -1
- package/dist/commands/fingerprint-commands.js +1 -6
- 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 +26 -30
- 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 +23 -13
- package/dist/commands/init-command.js.map +1 -1
- package/dist/commands/pull-command.d.ts.map +1 -1
- package/dist/commands/pull-command.js +12 -19
- package/dist/commands/pull-command.js.map +1 -1
- package/dist/commands/pulse-command.js +1 -10
- package/dist/commands/pulse-command.js.map +1 -1
- package/dist/commands/review-command.d.ts.map +1 -1
- package/dist/commands/review-command.js +1 -0
- package/dist/commands/review-command.js.map +1 -1
- package/dist/ghost-core/catalog/assemble.d.ts +0 -4
- package/dist/ghost-core/catalog/assemble.d.ts.map +1 -1
- package/dist/ghost-core/catalog/assemble.js +0 -10
- package/dist/ghost-core/catalog/assemble.js.map +1 -1
- package/dist/ghost-core/catalog/index.d.ts +1 -1
- package/dist/ghost-core/catalog/index.d.ts.map +1 -1
- package/dist/ghost-core/catalog/index.js +1 -1
- package/dist/ghost-core/catalog/index.js.map +1 -1
- package/dist/ghost-core/catalog/menu.d.ts +1 -11
- package/dist/ghost-core/catalog/menu.d.ts.map +1 -1
- package/dist/ghost-core/catalog/menu.js +1 -6
- package/dist/ghost-core/catalog/menu.js.map +1 -1
- package/dist/ghost-core/catalog/types.d.ts +0 -6
- package/dist/ghost-core/catalog/types.d.ts.map +1 -1
- package/dist/ghost-core/glossary.d.ts +0 -13
- package/dist/ghost-core/glossary.d.ts.map +1 -1
- package/dist/ghost-core/glossary.js +0 -7
- package/dist/ghost-core/glossary.js.map +1 -1
- package/dist/ghost-core/index.d.ts +2 -2
- package/dist/ghost-core/index.d.ts.map +1 -1
- package/dist/ghost-core/index.js +1 -1
- package/dist/ghost-core/index.js.map +1 -1
- package/dist/ghost-core/package-manifest.d.ts +7 -0
- package/dist/ghost-core/package-manifest.d.ts.map +1 -1
- package/dist/ghost-core/package-manifest.js +10 -0
- package/dist/ghost-core/package-manifest.js.map +1 -1
- package/dist/init-payloads/median/cliche.median.md +86 -0
- package/dist/init-payloads/median/median-tells.md +117 -0
- package/dist/init-payloads/skeleton/brand.md +22 -0
- package/dist/init-payloads/skeleton/context.conversation.md +24 -0
- package/dist/init-payloads/skeleton/foundation.color.md +39 -0
- package/dist/init-payloads/skeleton/foundation.composition.md +30 -0
- package/dist/init-payloads/skeleton/foundation.controls.md +29 -0
- package/dist/init-payloads/skeleton/foundation.layout.md +45 -0
- package/dist/init-payloads/skeleton/foundation.motion.md +34 -0
- package/dist/init-payloads/skeleton/foundation.type.md +44 -0
- package/dist/init-payloads/skeleton/foundation.voice.md +29 -0
- package/dist/init-payloads/skeleton/glossary.md +39 -0
- package/dist/init-payloads/vessel-light/anti-goal.median.md +86 -0
- package/dist/init-payloads/vessel-light/anti-goal.tells.md +38 -0
- package/dist/init-payloads/vessel-light/checks/conversation-grammar.md +20 -0
- package/dist/init-payloads/vessel-light/checks/median-tells.md +103 -0
- package/dist/init-payloads/vessel-light/checks/motion-restraint.md +20 -0
- package/dist/init-payloads/vessel-light/checks/relationships.md +33 -0
- package/dist/init-payloads/vessel-light/checks/shape-matches-job.md +43 -0
- package/dist/init-payloads/vessel-light/checks/values.md +51 -0
- package/dist/init-payloads/vessel-light/glossary.md +44 -0
- package/dist/init-payloads/vessel-light/grammar.color-roles.md +30 -0
- package/dist/init-payloads/vessel-light/grammar.conversation.md +30 -0
- package/dist/init-payloads/vessel-light/grammar.deletion.md +35 -0
- package/dist/init-payloads/vessel-light/grammar.hierarchy.md +58 -0
- package/dist/init-payloads/vessel-light/grammar.job.md +54 -0
- package/dist/init-payloads/vessel-light/grammar.motion.md +27 -0
- package/dist/init-payloads/vessel-light/grammar.rhythm.md +27 -0
- package/dist/init-payloads/vessel-light/grammar.surfaces.md +35 -0
- package/dist/init-payloads/vessel-light/index.md +33 -0
- package/dist/init-payloads/vessel-light/manifest.yml +3 -0
- package/dist/init-payloads/vessel-light/materials/fonts/HKGrotesk-Black.woff2 +0 -0
- package/dist/init-payloads/vessel-light/materials/fonts/HKGrotesk-Bold.woff2 +0 -0
- package/dist/init-payloads/vessel-light/materials/fonts/HKGrotesk-ExtraBold.woff2 +0 -0
- package/dist/init-payloads/vessel-light/materials/fonts/HKGrotesk-Light.woff2 +0 -0
- package/dist/init-payloads/vessel-light/materials/fonts/HKGrotesk-Medium.woff2 +0 -0
- package/dist/init-payloads/vessel-light/materials/fonts/HKGrotesk-Regular.woff2 +0 -0
- package/dist/init-payloads/vessel-light/materials/fonts/HKGrotesk-SemiBold.woff2 +0 -0
- package/dist/init-payloads/vessel-light/materials/primitives.css +351 -0
- package/dist/init-payloads/vessel-light/materials/ref/composition.conversation.html +63 -0
- package/dist/init-payloads/vessel-light/materials/ref/composition.editorial.html +74 -0
- package/dist/init-payloads/vessel-light/materials/ref/composition.form.html +89 -0
- package/dist/init-payloads/vessel-light/materials/ref/composition.overlay.html +66 -0
- package/dist/init-payloads/vessel-light/materials/ref/composition.table.html +104 -0
- package/dist/init-payloads/vessel-light/materials/ref/email.html +80 -0
- package/dist/init-payloads/vessel-light/materials/tokens.css +191 -0
- package/dist/init-payloads/vessel-light/register.data-density.md +39 -0
- package/dist/init-payloads/vessel-light/register.editorial.md +41 -0
- package/dist/init-payloads/vessel-light/register.email.md +43 -0
- package/dist/init-payloads/vessel-light/signature.palette.md +45 -0
- package/dist/init-payloads/vessel-light/signature.shape.md +27 -0
- package/dist/init-payloads/vessel-light/signature.temperature.md +44 -0
- package/dist/init-payloads/vessel-light/signature.type.md +37 -0
- package/dist/observability-events.d.ts +0 -3
- package/dist/observability-events.d.ts.map +1 -1
- package/dist/observability-events.js.map +1 -1
- package/dist/review/resolve.d.ts +3 -4
- package/dist/review/resolve.d.ts.map +1 -1
- package/dist/review/resolve.js +12 -9
- package/dist/review/resolve.js.map +1 -1
- package/dist/review/review-packet.d.ts +2 -1
- package/dist/review/review-packet.d.ts.map +1 -1
- package/dist/review/review-packet.js +9 -20
- package/dist/review/review-packet.js.map +1 -1
- package/dist/scan/check-files.d.ts.map +1 -1
- package/dist/scan/check-files.js +0 -15
- package/dist/scan/check-files.js.map +1 -1
- package/dist/scan/check-scaffold.d.ts +1 -0
- package/dist/scan/check-scaffold.d.ts.map +1 -1
- package/dist/scan/check-scaffold.js +17 -1
- package/dist/scan/check-scaffold.js.map +1 -1
- package/dist/scan/fingerprint-package-lint.d.ts +8 -0
- package/dist/scan/fingerprint-package-lint.d.ts.map +1 -0
- package/dist/scan/fingerprint-package-lint.js +284 -0
- package/dist/scan/fingerprint-package-lint.js.map +1 -0
- package/dist/scan/fingerprint-package-loader.d.ts.map +1 -1
- package/dist/scan/fingerprint-package-loader.js +2 -29
- package/dist/scan/fingerprint-package-loader.js.map +1 -1
- package/dist/scan/fingerprint-package.d.ts +16 -8
- package/dist/scan/fingerprint-package.d.ts.map +1 -1
- package/dist/scan/fingerprint-package.js +41 -241
- package/dist/scan/fingerprint-package.js.map +1 -1
- package/dist/scan/node-files.d.ts.map +1 -1
- package/dist/scan/node-files.js +1 -3
- package/dist/scan/node-files.js.map +1 -1
- package/dist/scan/packed-payloads.d.ts +4 -0
- package/dist/scan/packed-payloads.d.ts.map +1 -0
- package/dist/scan/packed-payloads.js +55 -0
- package/dist/scan/packed-payloads.js.map +1 -0
- package/dist/scan/templates.d.ts +20 -2
- package/dist/scan/templates.d.ts.map +1 -1
- package/dist/scan/templates.js +106 -26
- package/dist/scan/templates.js.map +1 -1
- package/dist/skill-bundle/SKILL.md +16 -13
- package/dist/skill-bundle/references/adapting-a-starter.md +104 -0
- package/dist/skill-bundle/references/authoring-scenarios.md +42 -5
- package/dist/skill-bundle/references/blocks.md +1 -1
- package/dist/skill-bundle/references/brief.md +5 -6
- package/dist/skill-bundle/references/capture.md +52 -41
- package/dist/skill-bundle/references/concrete-tiers.md +95 -0
- package/dist/skill-bundle/references/recall.md +6 -12
- package/dist/skill-bundle/references/schema.md +15 -24
- package/dist/skill-bundle/references/self-check.md +2 -2
- package/dist/skill-bundle/references/steering-audit.md +7 -10
- package/package.json +2 -2
- package/dist/scan/steering-template.d.ts +0 -8
- package/dist/scan/steering-template.d.ts.map +0 -1
- package/dist/scan/steering-template.js +0 -266
- package/dist/scan/steering-template.js.map +0 -1
- package/dist/skill-bundle/references/wild.md +0 -30
|
@@ -19,14 +19,13 @@ Ghost treats the fingerprint package as canonical.
|
|
|
19
19
|
glossary.md # the kind vocabulary + what each kind means
|
|
20
20
|
principle.trust.md # a brand truth of kind `principle`
|
|
21
21
|
pattern.invoice.md # a pattern with an optional ## Skeleton
|
|
22
|
-
anti-goal.generic.md # a
|
|
22
|
+
anti-goal.generic.md # a review-critical replacement rule
|
|
23
23
|
voice.md # a brand truth without a kind
|
|
24
24
|
```
|
|
25
25
|
|
|
26
26
|
A **node** is a markdown file: a `description`, optional `materials`, and a
|
|
27
27
|
prose body. The package is **flat** — no hierarchy, no inheritance, no edges. A
|
|
28
|
-
node's kind comes from its filename prefix; the glossary declares the kinds
|
|
29
|
-
may declare consumption posture such as `posture: guard`.
|
|
28
|
+
node's kind comes from its filename prefix; the glossary declares the kinds.
|
|
30
29
|
|
|
31
30
|
## Lead with an annotated exemplar over a complete artifact
|
|
32
31
|
|
|
@@ -89,6 +88,21 @@ safe before what to do. One calm next step. No "Oops," no exclamation points,
|
|
|
89
88
|
no blame on the user or the network.
|
|
90
89
|
```
|
|
91
90
|
|
|
91
|
+
## Write patterns as bound and open
|
|
92
|
+
|
|
93
|
+
A pattern node binds part of a reusable structure and leaves the rest open.
|
|
94
|
+
State both explicitly:
|
|
95
|
+
|
|
96
|
+
- **Bound** — what the agent should not redecide: the structural moves fixed
|
|
97
|
+
regardless of task (what renders first, what appears exactly once, what may
|
|
98
|
+
never compete for attention).
|
|
99
|
+
- **Open** — where the agent may choose, within limits (which evidence shape
|
|
100
|
+
fits, how tone flexes, where secondary content may go).
|
|
101
|
+
|
|
102
|
+
If everything is bound, the node is a template, not a pattern. If nothing is
|
|
103
|
+
bound, it is vibes, not steering. A pattern may also `Refines:` a broader
|
|
104
|
+
principle by id; when the two conflict, the principle wins.
|
|
105
|
+
|
|
92
106
|
## Add Skeletons when the opening structure matters
|
|
93
107
|
|
|
94
108
|
A `## Skeleton` section contains the literal opening structure the agent should
|
|
@@ -119,18 +133,12 @@ Keep them short, specific, and attached to concrete objects whenever possible:
|
|
|
119
133
|
Do not turn every observation into a rule. Stale or generic rules average
|
|
120
134
|
against the exemplars and pull the packet back toward the median.
|
|
121
135
|
|
|
122
|
-
## Write
|
|
136
|
+
## Write anti-goals as replacement, not as blacklist
|
|
123
137
|
|
|
124
|
-
|
|
125
|
-
|
|
138
|
+
An anti-goal is ordinary node prose whose kind the glossary defines as a
|
|
139
|
+
review-critical replacement rule.
|
|
126
140
|
|
|
127
|
-
|
|
128
|
-
kinds:
|
|
129
|
-
- name: anti-goal
|
|
130
|
-
posture: guard
|
|
131
|
-
```
|
|
132
|
-
|
|
133
|
-
A good guard states **not X; instead Y; recognize the switch by Z**. The
|
|
141
|
+
A good anti-goal states **not X; instead Y; recognize the switch by Z**. The
|
|
134
142
|
replacement matters because negation alone raises the salience of the rejected
|
|
135
143
|
thing.
|
|
136
144
|
|
|
@@ -148,12 +156,12 @@ Instead: flat paper surfaces, one restrained accent, square alignment, and a
|
|
|
148
156
|
next action backed by the number or source that justifies it.
|
|
149
157
|
|
|
150
158
|
Recognize the switch: if removing the logo would make the surface look like any
|
|
151
|
-
SaaS template, the
|
|
159
|
+
SaaS template, the anti-goal failed even when every token is technically valid.
|
|
152
160
|
```
|
|
153
161
|
|
|
154
162
|
The strongest anti-goal is silent: purged from exemplars, absent from starter
|
|
155
|
-
structures, and enforced by a probe-backed check in review. Use
|
|
156
|
-
name the replacement; use checks and `probe:` commands to catch regressions.
|
|
163
|
+
structures, and enforced by a probe-backed check in review. Use anti-goal prose
|
|
164
|
+
to name the replacement; use checks and `probe:` commands to catch regressions.
|
|
157
165
|
|
|
158
166
|
## The node shape
|
|
159
167
|
|
|
@@ -181,7 +189,7 @@ action beats completeness...
|
|
|
181
189
|
`materials`, a substantial fenced example, or a `## Skeleton`. You do not
|
|
182
190
|
declare a separate type.
|
|
183
191
|
|
|
184
|
-
## What a body answers
|
|
192
|
+
## What a node body answers
|
|
185
193
|
|
|
186
194
|
While drafting, ask three questions of every truth — *why* (the stance), *with
|
|
187
195
|
what* (the materials), and *how it is assembled* (the patterns). These are
|
|
@@ -204,15 +212,15 @@ genuinely a different truth.
|
|
|
204
212
|
|
|
205
213
|
## Node prose stances
|
|
206
214
|
|
|
207
|
-
Node prose is steering payload. A generic sentence in a body averages every
|
|
215
|
+
Node prose is steering payload. A generic sentence in a node body averages every
|
|
208
216
|
future generation toward the median, so hold drafts to these stances before the
|
|
209
217
|
human sees them.
|
|
210
218
|
|
|
211
219
|
Two carve-outs come first, because they invert ordinary prose advice:
|
|
212
220
|
|
|
213
|
-
- **
|
|
214
|
-
is the required
|
|
215
|
-
never "improve"
|
|
221
|
+
- **Anti-goals keep their negation.** "Not X; instead Y; recognize the switch
|
|
222
|
+
by Z" is the required anti-goal form. Naming the rejected thing is the
|
|
223
|
+
anti-goal's job; never "improve" one by stating only the replacement.
|
|
216
224
|
- **Invariants keep their absolutes.** "Never" and "always" are correct in an
|
|
217
225
|
invariant when the hard line is real and human-ratified. Absolutes are lazy
|
|
218
226
|
only when they stand in for an uncurated stance.
|
|
@@ -226,13 +234,13 @@ Everywhere else:
|
|
|
226
234
|
fits a competitor's brand, it is retrieval-dead; rewrite it until it could
|
|
227
235
|
belong to no one else.
|
|
228
236
|
- **Cut unratified hedges.** "Generally," "where possible," and "consider" in a
|
|
229
|
-
body mean the human never picked a side. Get the ratification or cut the
|
|
237
|
+
node body mean the human never picked a side. Get the ratification or cut the
|
|
230
238
|
sentence.
|
|
231
239
|
- **Ban brand-deck filler.** "Elevate," "delight," "seamless," "best-in-class,"
|
|
232
240
|
"empower." When a brand doc supplies these words, they are testimony to
|
|
233
241
|
distill, never prose to keep.
|
|
234
242
|
- **Settle the altitude on purpose.** Every truth is either claimed universal
|
|
235
|
-
or given its condition in the prose. A body that does neither was never
|
|
243
|
+
or given its condition in the prose. A node body that does neither was never
|
|
236
244
|
curated for altitude; ask the human which it is.
|
|
237
245
|
|
|
238
246
|
## Score drafts before curation
|
|
@@ -244,7 +252,7 @@ dimension:
|
|
|
244
252
|
| --- | --- |
|
|
245
253
|
| Testimony | Can you quote the human words or artifact this node came from? |
|
|
246
254
|
| Discrimination | Does the description fit only this brand? |
|
|
247
|
-
| Force | Does the body decide something, or merely describe something? |
|
|
255
|
+
| Force | Does the node body decide something, or merely describe something? |
|
|
248
256
|
| Altitude | Is it universal on purpose, or given its condition? |
|
|
249
257
|
| Residue | Is it free of starter-demo prose and brand-deck filler? |
|
|
250
258
|
|
|
@@ -259,15 +267,23 @@ strongest form that fixes the observed failure.
|
|
|
259
267
|
|
|
260
268
|
| If the agent keeps... | Author... |
|
|
261
269
|
| --- | --- |
|
|
262
|
-
| missing the truth | sharper `description
|
|
270
|
+
| missing the truth | sharper `description`; move universal truth to the cover |
|
|
263
271
|
| inventing values | `asset.*` node with materials and exact names |
|
|
264
|
-
| producing generic output | `anti-goal.*`
|
|
272
|
+
| producing generic output | `anti-goal.*` replacement plus annotated `exemplar.*` |
|
|
265
273
|
| choosing the wrong structure | `pattern.*` with bound/open and a `## Skeleton` |
|
|
266
274
|
| crossing hard lines | invariant prose plus a check, optionally with `probe:` |
|
|
267
275
|
| applying guidance too broadly | condition in prose |
|
|
268
276
|
| making bad tradeoffs | `decision.*` trace |
|
|
269
277
|
| producing correct but forgettable work | scoped `concept.*` |
|
|
270
278
|
|
|
279
|
+
A `concept.*` node holds a one-time creative move — a launch hook, a
|
|
280
|
+
campaign idea, a specific non-median leap the corpus would not have produced
|
|
281
|
+
by recombining its other truths. Scope it explicitly to the task or surface
|
|
282
|
+
it was written for, keep it distinct from invariants, and do not generalize
|
|
283
|
+
it into permanent brand law. If it proves reusable later, promote it into an
|
|
284
|
+
exemplar or pattern deliberately; do not let a one-off default into durable
|
|
285
|
+
truth by accumulation.
|
|
286
|
+
|
|
271
287
|
Ask while authoring:
|
|
272
288
|
|
|
273
289
|
- What complete artifact shows the brand at its best?
|
|
@@ -298,19 +314,16 @@ ghost init # scaffolds the steering starter
|
|
|
298
314
|
ghost validate
|
|
299
315
|
```
|
|
300
316
|
|
|
301
|
-
`ghost init` seeds the
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
`ghost init --template minimal` when you only want the small
|
|
307
|
-
manifest/glossary/index starter.
|
|
317
|
+
`ghost init` seeds the skeleton starter: the manifest, a starter
|
|
318
|
+
`glossary.md`, a `brand.md` cover, foundation chapters with open questions, and
|
|
319
|
+
the model cliche floor. Replace open questions with real product truth before
|
|
320
|
+
using it to steer generation. Use `ghost init --template minimal` for a
|
|
321
|
+
manifest, glossary, cover, and cliche floor.
|
|
308
322
|
|
|
309
|
-
Write
|
|
310
|
-
every task, what
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
here.
|
|
323
|
+
Write the manifest-declared cover as the human-curated front door:
|
|
324
|
+
non-negotiables that apply to every task, what the fingerprint covers, and any
|
|
325
|
+
stricter silence posture. `ghost gather` inlines it before the menu, so anything
|
|
326
|
+
that must never be missed belongs there.
|
|
314
327
|
|
|
315
328
|
Nodes may carry a `materials` list in frontmatter: repo-relative paths/globs or
|
|
316
329
|
HTTPS URLs for the concrete materials the prose governs. Put brand-owned
|
|
@@ -324,9 +337,7 @@ feed-back only; they are never gathered.
|
|
|
324
337
|
Declare the kinds you will use in `glossary.md` — the frontmatter `kinds` list
|
|
325
338
|
plus a `#` section per kind explaining its meaning and normative weight. Kinds
|
|
326
339
|
are your choice; Ghost ships no fixed vocabulary. A node's filename prefix must
|
|
327
|
-
match a declared kind (or the node has no kind).
|
|
328
|
-
whose nodes are review-critical replacements; use `posture: wild` only for
|
|
329
|
-
truths that should stay opt-in.
|
|
340
|
+
match a declared kind (or the node has no kind).
|
|
330
341
|
|
|
331
342
|
The glossary is a dictionary of every term with defined meaning in the corpus.
|
|
332
343
|
A root `voice.md` with a `voice` glossary entry declares the scope for future
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: concrete-tiers
|
|
3
|
+
description: Decide which concrete code tiers a fingerprint carries — tokens, skeletons, components, exemplars — and justify every absence.
|
|
4
|
+
handoffs:
|
|
5
|
+
- label: Audit what the package carries today
|
|
6
|
+
command: ghost gather
|
|
7
|
+
prompt: Which nodes carry concrete material, and which of the four tiers does the package cover?
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# Recipe: Choose The Concrete Code Tiers
|
|
11
|
+
|
|
12
|
+
**Goal:** decide, deliberately, which tiers of concrete code material a
|
|
13
|
+
fingerprint carries — and be able to say why any tier is absent. Absence
|
|
14
|
+
should be a decision, not a default.
|
|
15
|
+
|
|
16
|
+
Prose states a truth; concrete code makes it the cheapest continuation. A
|
|
17
|
+
package can carry code at four tiers, and each does a different job during
|
|
18
|
+
generation:
|
|
19
|
+
|
|
20
|
+
| Tier | Form | What it buys |
|
|
21
|
+
| --- | --- | --- |
|
|
22
|
+
| Tokens | `materials/tokens.css`, linked from nodes | Named values — the agent stops inventing colors, sizes, and durations. |
|
|
23
|
+
| Skeletons | `## Skeleton` HTML blocks inside pattern nodes | The opening structure — layout is committed before the generic default can win the first tokens. |
|
|
24
|
+
| Components | primitive classes or a class vocabulary in `materials/` | Reusable styling decisions — padding, variants, and states compress into names. |
|
|
25
|
+
| Exemplars | a complete surface with load-bearing moves annotated | Cross-node interactions — the constraints no single node states, demonstrated working together. |
|
|
26
|
+
|
|
27
|
+
Two properties decide whether a tier steers, and they are not the same thing:
|
|
28
|
+
|
|
29
|
+
- **Scope** — what the tier constrains: a token constrains one value, a
|
|
30
|
+
skeleton one block, an exemplar one whole surface.
|
|
31
|
+
- **Delivery** — whether the material is guaranteed to reach the agent.
|
|
32
|
+
Skeleton blocks live in node bodies, so `ghost pull` delivers them with the
|
|
33
|
+
truth. Files behind `materials:` locators reach only agents that spend a
|
|
34
|
+
turn reading them. A tier the agent never sees contributes nothing;
|
|
35
|
+
presence in the package is not presence in context.
|
|
36
|
+
|
|
37
|
+
## The floor and the earned tiers
|
|
38
|
+
|
|
39
|
+
**Tokens are the floor.** Every package that steers visual output carries a
|
|
40
|
+
token vocabulary, and every other tier repeats those token names. That
|
|
41
|
+
repetition is the one redundancy worth keeping: the same name appearing in
|
|
42
|
+
prose, skeleton, and exemplar is what stops the agent from inventing
|
|
43
|
+
plausible near-miss values.
|
|
44
|
+
|
|
45
|
+
The other three tiers are earned by the package's shape:
|
|
46
|
+
|
|
47
|
+
- **Skeletons** pay when the package specifies few, composition-critical
|
|
48
|
+
surfaces — where the first structural commitment decides everything
|
|
49
|
+
downstream — and when consuming agents may read only pulled bodies.
|
|
50
|
+
- **Components** pay when the package covers many diverse surfaces generated
|
|
51
|
+
often, and the consuming agent reads material files. A class vocabulary
|
|
52
|
+
amortizes across surfaces; for a single surface shape it is dead weight.
|
|
53
|
+
- **Exemplars** pay almost everywhere: they are the cheapest way to show
|
|
54
|
+
tiers interacting. One per distinct surface shape; a package with one
|
|
55
|
+
exemplar and many surface shapes pulls every task toward the demonstrated
|
|
56
|
+
shape.
|
|
57
|
+
|
|
58
|
+
## Every tier is a copy that can drift
|
|
59
|
+
|
|
60
|
+
Each tier repeats the token truth, and a stale copy steers harder than the
|
|
61
|
+
prose that corrects it. A hardcoded value in an exemplar where a token
|
|
62
|
+
exists is a lie waiting for a rename. Before adding a tier, accept its
|
|
63
|
+
maintenance bill; after any token change, sweep every tier for stranded
|
|
64
|
+
literals.
|
|
65
|
+
|
|
66
|
+
A tier can also fight the package's stance. A package whose truth is
|
|
67
|
+
"compose each surface fresh from the tokens" contradicts itself by shipping
|
|
68
|
+
a component kit; a package whose truth is "compose from the grammar, the
|
|
69
|
+
refs are examples not a framework" hardens toward template convergence if
|
|
70
|
+
every pattern carries a mandatory skeleton. When a tier and the stance
|
|
71
|
+
conflict, the stance wins — that absence is the package expressing itself.
|
|
72
|
+
|
|
73
|
+
## Annotate whatever code ships
|
|
74
|
+
|
|
75
|
+
Un-annotated code teaches content along with structure. Whatever tier the
|
|
76
|
+
package carries, split the annotation two ways: name the load-bearing moves
|
|
77
|
+
(what makes it this brand — copy these) and mark the incidental content
|
|
78
|
+
(domain, figures, labels — swap these). An exemplar without this split
|
|
79
|
+
teaches the agent that the example's subject matter is the brand.
|
|
80
|
+
|
|
81
|
+
## The self-check
|
|
82
|
+
|
|
83
|
+
For any package, answer four questions:
|
|
84
|
+
|
|
85
|
+
1. Where does the value vocabulary live? (If not a token file: why?)
|
|
86
|
+
2. What forces the opening structure of the package's most
|
|
87
|
+
composition-critical surface? (If nothing: is that surface's structure
|
|
88
|
+
genuinely open?)
|
|
89
|
+
3. What demonstrates the cross-node constraints working together? (If
|
|
90
|
+
nothing: which interactions is the agent left to infer?)
|
|
91
|
+
4. For every tier present: will the consuming agent actually have it in
|
|
92
|
+
context when it generates?
|
|
93
|
+
|
|
94
|
+
Any answer may legitimately be "absent, because" — the recipe's only
|
|
95
|
+
requirement is that the "because" exists.
|
|
@@ -5,14 +5,9 @@ description: Gather and pull the applicable Ghost brand truths for a task.
|
|
|
5
5
|
|
|
6
6
|
# Recipe: Recall Ghost Fingerprint
|
|
7
7
|
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
default because guards are brand-defining.
|
|
12
|
-
|
|
13
|
-
1. Run `ghost gather <ask>` for the actual task. Read the coverage line: all
|
|
14
|
-
prose-only fingerprints are weak steering, and guard count tells you whether
|
|
15
|
-
review-critical negative space exists.
|
|
8
|
+
1. Run `ghost gather <ask>` for the actual task. The cover is inlined by gather;
|
|
9
|
+
do not pull it separately. Read the coverage line: all-prose fingerprints are
|
|
10
|
+
weak steering.
|
|
16
11
|
2. Select against `description`; Ghost never selects for you.
|
|
17
12
|
3. Run `ghost pull <id> [<id>…]`. Prefer `pull` over reading files directly: it
|
|
18
13
|
orders the packet for steering, inlines small local materials, emits
|
|
@@ -23,14 +18,13 @@ default because guards are brand-defining.
|
|
|
23
18
|
|
|
24
19
|
`ghost pull` emits selected nodes in steering order:
|
|
25
20
|
|
|
26
|
-
1.
|
|
21
|
+
1. Cover first, when explicitly selected; normally it is already inlined by
|
|
22
|
+
gather and should not be pulled separately.
|
|
27
23
|
2. Concrete-material nodes: `materials`, substantial fenced examples, or
|
|
28
24
|
`## Skeleton` sections, with materials inlined or pointed to inspect.
|
|
29
25
|
3. Prose-only rules: principles, conditions, decisions, and other rules without
|
|
30
26
|
concrete payload.
|
|
31
|
-
4.
|
|
32
|
-
carefully.
|
|
33
|
-
5. Skeleton fences dead last: if one matches the surface, start from that
|
|
27
|
+
4. Skeleton fences dead last: if one matches the surface, start from that
|
|
34
28
|
structure verbatim.
|
|
35
29
|
|
|
36
30
|
Return the selected truths with node ids, how each applies, and where the
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: schema
|
|
3
|
-
description: The Ghost fingerprint package shape: flat nodes, derived concreteness, Skeletons,
|
|
3
|
+
description: The Ghost fingerprint package shape: flat nodes, derived concreteness, Skeletons, probes, and checks.
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# Ghost Fingerprint Package Reference
|
|
@@ -9,8 +9,8 @@ Canonical package:
|
|
|
9
9
|
|
|
10
10
|
```text
|
|
11
11
|
.ghost/
|
|
12
|
-
manifest.yml ghost.fingerprint-package/v1: schema + id
|
|
13
|
-
glossary.md kind vocabulary + meanings
|
|
12
|
+
manifest.yml ghost.fingerprint-package/v1: schema + id + optional cover
|
|
13
|
+
glossary.md kind vocabulary + meanings
|
|
14
14
|
materials/ bundled materials; never a node source
|
|
15
15
|
<kind>.<slug>.md a brand truth of a declared kind
|
|
16
16
|
<slug>.md a brand truth without a kind
|
|
@@ -20,25 +20,16 @@ Canonical package:
|
|
|
20
20
|
Reserved at the root: `manifest.yml`, `glossary.md`, `materials/`, and
|
|
21
21
|
`checks/`. Every other `*.md` is a node.
|
|
22
22
|
|
|
23
|
-
##
|
|
23
|
+
## Manifest
|
|
24
24
|
|
|
25
|
-
|
|
25
|
+
`manifest.yml` declares `schema`, `id`, and optionally `cover`. `cover` is a
|
|
26
|
+
node id. When present and resolved, `ghost gather` inlines that node above the
|
|
27
|
+
menu on every invocation. Use it for what selection cannot reliably retrieve:
|
|
28
|
+
essence, temperature, and brand-only refusals.
|
|
26
29
|
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
- name: anti-goal
|
|
31
|
-
posture: guard
|
|
32
|
-
- name: provocation
|
|
33
|
-
posture: wild
|
|
34
|
-
```
|
|
35
|
-
|
|
36
|
-
- `steady`: default, gathered normally.
|
|
37
|
-
- `guard`: review-critical negative space. Stays in default gather, appears at
|
|
38
|
-
the tail of `ghost pull`, and is auto-offered by `ghost review` when its
|
|
39
|
-
materials match touched files.
|
|
40
|
-
- `wild`: deliberate push beyond the fingerprint. Default gather excludes wild
|
|
41
|
-
kinds unless `--wild` is explicit.
|
|
30
|
+
`ghost validate` enforces the cover contract: a missing referenced cover is an
|
|
31
|
+
error, an undeclared cover is a warning, and a cover body past the one-screen
|
|
32
|
+
budget (1500 bytes) is a warning.
|
|
42
33
|
|
|
43
34
|
## Nodes
|
|
44
35
|
|
|
@@ -110,10 +101,10 @@ probes are the same class as npm scripts; Git review is the boundary.
|
|
|
110
101
|
|
|
111
102
|
## Gather / Pull / Review
|
|
112
103
|
|
|
113
|
-
- `ghost gather` emits the node menu,
|
|
114
|
-
invisible.
|
|
104
|
+
- `ghost gather` emits the cover above the node menu, then coverage counts.
|
|
105
|
+
Checks are invisible.
|
|
115
106
|
- `ghost pull` emits selected nodes in steering order and inlines small local
|
|
116
107
|
materials. Binary local materials become inspect-pointers.
|
|
117
108
|
- `ghost review` matches diff files to local node materials, offers relevant
|
|
118
|
-
checks
|
|
119
|
-
|
|
109
|
+
checks, embeds probe evidence, and emits a packet for the host agent to
|
|
110
|
+
judge.
|
|
@@ -60,6 +60,6 @@ When you cannot answer the grounding questions:
|
|
|
60
60
|
|
|
61
61
|
A genuinely silent fingerprint is an expected state, not a blocker. When it does
|
|
62
62
|
not cover the task, say so plainly and proceed with provisional local reasoning
|
|
63
|
-
when safe; label it non-Ghost-backed. If the fingerprint's
|
|
64
|
-
|
|
63
|
+
when safe; label it non-Ghost-backed. If the fingerprint's cover declares a stricter
|
|
64
|
+
silence posture, honor it over this default. Ask a human before
|
|
65
65
|
high-risk or brand-defining choices.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: steering-audit
|
|
3
|
-
description: Audit a Ghost fingerprint for concrete steering coverage
|
|
3
|
+
description: Audit a Ghost fingerprint for concrete steering coverage.
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# Recipe: Audit Steering Coverage
|
|
@@ -19,16 +19,13 @@ ghost pulse --format json
|
|
|
19
19
|
|
|
20
20
|
If checks are installed and a diff exists, run `ghost review` too.
|
|
21
21
|
|
|
22
|
-
## Headline the audit with concreteness
|
|
22
|
+
## Headline the audit with concreteness
|
|
23
23
|
|
|
24
24
|
Report first:
|
|
25
25
|
|
|
26
26
|
- **Concreteness coverage:** total nodes, concrete-material nodes, prose-only
|
|
27
27
|
nodes. Concrete means non-empty `materials`, a fenced code block of at least 3
|
|
28
28
|
lines, or a `## Skeleton` section.
|
|
29
|
-
- **Guard routing:** how many guard nodes exist, whether they stay in default
|
|
30
|
-
gather, and whether `ghost review` can auto-offer matched guards via
|
|
31
|
-
materials.
|
|
32
29
|
- **Pulse by concreteness:** concrete exposure/pull rate vs prose-only
|
|
33
30
|
exposure/pull rate. This is the tuning instrument: if concrete nodes are not
|
|
34
31
|
pulled, descriptions or task selection are failing.
|
|
@@ -37,16 +34,16 @@ Report first:
|
|
|
37
34
|
|
|
38
35
|
| Row | Status | Evidence | Next move |
|
|
39
36
|
| --- | --- | --- | --- |
|
|
40
|
-
| Retrieval | strong / weak | descriptions, ids,
|
|
37
|
+
| Retrieval | strong / weak | descriptions, ids, cover | sharpen descriptions or move universal truth to the cover |
|
|
41
38
|
| Concreteness | strong / thin | materials, fenced examples, Skeletons | add concrete locators, exemplars, or opening structures |
|
|
42
|
-
|
|
|
43
|
-
| Consistency | clean / conflicting | concrete bodies vs rules
|
|
44
|
-
| Stance | present / missing |
|
|
39
|
+
| Anti-goals | present / missing / vague | `anti-goal.*`, review packet | write not-X-instead-Y replacements and material locators |
|
|
40
|
+
| Consistency | clean / conflicting | concrete bodies vs rules | update stale examples; examples average with rules |
|
|
41
|
+
| Stance | present / missing | cover, `principle.*` | write forced-choice principles |
|
|
45
42
|
| Materials | present / missing | `materials`, inspect-pointers | point at real assets/components/tokens |
|
|
46
43
|
| Exemplars | annotated / unannotated / missing | fenced samples, screenshots | say what to copy and what is incidental |
|
|
47
44
|
| Patterns | bound-open / loose / missing | `pattern.*`, Skeletons | state applies / bound / open and add a Skeleton when opening structure matters |
|
|
48
45
|
| Checks | covered / partial / missing | checks/, probes, review packet | add checks/probes for high-risk invariants |
|
|
49
|
-
| Silence posture | defined / missing |
|
|
46
|
+
| Silence posture | defined / missing | cover | say when to proceed provisionally or ask |
|
|
50
47
|
|
|
51
48
|
## Task-level readiness
|
|
52
49
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@design-intelligence/ghost",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.22.0",
|
|
4
4
|
"description": "Ghost CLI for the brand fingerprint: a portable steering packet of prose truths your agent reads before it builds, with advisory review after",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"author": "Block, Inc.",
|
|
@@ -74,6 +74,6 @@
|
|
|
74
74
|
"zod": "^4.3.6"
|
|
75
75
|
},
|
|
76
76
|
"scripts": {
|
|
77
|
-
"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"
|
|
77
|
+
"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"
|
|
78
78
|
}
|
|
79
79
|
}
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
import type { GhostInitTemplate, TemplateFile } from "./templates.js";
|
|
2
|
-
interface SteeringTemplateDeps {
|
|
3
|
-
manifestFile(): TemplateFile;
|
|
4
|
-
gitignoreFile(): TemplateFile;
|
|
5
|
-
}
|
|
6
|
-
export declare function createSteeringTemplate({ manifestFile, gitignoreFile, }: SteeringTemplateDeps): GhostInitTemplate;
|
|
7
|
-
export {};
|
|
8
|
-
//# sourceMappingURL=steering-template.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"steering-template.d.ts","sourceRoot":"","sources":["../../src/scan/steering-template.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAEtE,UAAU,oBAAoB;IAC5B,YAAY,IAAI,YAAY,CAAC;IAC7B,aAAa,IAAI,YAAY,CAAC;CAC/B;AAED,wBAAgB,sBAAsB,CAAC,EACrC,YAAY,EACZ,aAAa,GACd,EAAE,oBAAoB,GAAG,iBAAiB,CAE1C"}
|