@telepath-computer/television 0.1.177 → 0.1.179

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (38) hide show
  1. package/dist/canonical/v1/components.js +25 -7
  2. package/dist/canonical/v1/styles.css +17 -1
  3. package/dist/cli.cjs +1187 -392
  4. package/dist/onboarding/README.md +35 -0
  5. package/dist/onboarding/business-ops/about.html +150 -0
  6. package/dist/onboarding/business-ops/retention-vs-releases.html +572 -0
  7. package/dist/onboarding/business-ops/revenue-vs-goals.html +621 -0
  8. package/dist/onboarding/onboarding-screens.json +167 -0
  9. package/dist/onboarding/productivity/about.html +149 -0
  10. package/dist/onboarding/productivity/company-todos/index.html +121 -0
  11. package/dist/onboarding/productivity/company-todos/task.css +205 -0
  12. package/dist/onboarding/productivity/company-todos/task.js +307 -0
  13. package/dist/onboarding/productivity/meeting-prep.html +440 -0
  14. package/dist/onboarding/productivity/priorities-today.html +409 -0
  15. package/dist/onboarding/productivity/todays-calendar/calendar.css +1 -0
  16. package/dist/onboarding/productivity/todays-calendar/calendar.js +716 -0
  17. package/dist/onboarding/productivity/todays-calendar/index.html +52 -0
  18. package/dist/onboarding/research/about.html +152 -0
  19. package/dist/onboarding/research/draft-blog-post.md +30 -0
  20. package/dist/onboarding/research/open-model-research.html +542 -0
  21. package/dist/onboarding/research/todays-news.html +503 -0
  22. package/dist/onboarding/{television-onboarding → tv-guide/welcome}/index.html +5 -5
  23. package/dist/skills/television/SKILL.md +44 -0
  24. package/dist/skills/tv-tasks/SKILL.md +241 -0
  25. package/dist/skills/tv-tasks/task.css +205 -0
  26. package/dist/skills/tv-tasks/task.js +307 -0
  27. package/dist/views/markdown/index.html +1 -1
  28. package/dist/web/assets/calendar-DToAnkzj.png +0 -0
  29. package/dist/web/assets/main-5017mprd.css +1 -0
  30. package/dist/web/assets/main-C-OjKUzX.js +865 -0
  31. package/dist/web/assets/markdown-DdDrJuVK.png +0 -0
  32. package/dist/web/assets/table-oeG9uAN1.png +0 -0
  33. package/dist/web/assets/tasks-D4xqXFPl.png +0 -0
  34. package/dist/web/index.html +2 -2
  35. package/package.json +1 -1
  36. package/dist/web/assets/main-BSAIRhnY.js +0 -768
  37. package/dist/web/assets/main-o9Z-XUYA.css +0 -1
  38. /package/dist/onboarding/{television-onboarding → tv-guide/welcome}/assets/television.svg +0 -0
@@ -0,0 +1,503 @@
1
+ <!doctype html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="utf-8">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1">
6
+ <title>Today&#39;s AI News</title>
7
+ <link rel="stylesheet" href="/canonical/v1/styles.css">
8
+ <script type="module" src="/canonical/v1/components.js"></script>
9
+ <style>
10
+ /* Shared base for onboarding artifacts ([[../index.md]]): document padding
11
+ and the centered content shell. Typography, text color, and background
12
+ are the canonical stylesheet's — nothing in this set restates or pins
13
+ them, so artifacts follow the active theme ([[../index.md#^respect-theme]]). */
14
+
15
+ * {
16
+ box-sizing: border-box;
17
+ }
18
+
19
+ body {
20
+ margin: 0;
21
+ padding: var(--space-32, 32px) var(--space-32, 32px) var(--space-64, 64px);
22
+ }
23
+
24
+ .shell {
25
+ max-width: 720px;
26
+ margin: 0 auto;
27
+ display: grid;
28
+ /* Pin the single column to the container so a wide child (a data table)
29
+ scrolls inside its own .table-wrap instead of stretching the track and
30
+ overflowing the card. */
31
+ grid-template-columns: minmax(0, 1fr);
32
+ gap: var(--space-20, 20px);
33
+ }
34
+
35
+ /* Card-density headings ([[../index.md]]): document-scale h1 is oversized
36
+ inside a TV card. */
37
+ h1 {
38
+ margin: 0;
39
+ font-size: var(--text-xl, 17px);
40
+ font-weight: 600;
41
+ line-height: 1.25;
42
+ }
43
+
44
+ /* A lead paragraph (the .lede or .summary-deck standfirst) belongs in the
45
+ header, tight beneath the title — not a full grid-gap below it. Every
46
+ onboarding artifact places its lead this way so the spacing is uniform. */
47
+ header > .lede,
48
+ header > .summary-deck {
49
+ margin-top: var(--space-8, 8px);
50
+ }
51
+
52
+
53
+ /* The hero header idiom ([[../index.md]]): a plain document header opening a
54
+ dashboard-shaped artifact — the title with a fictional freshness line and
55
+ an optional source/meta line, sitting on the document itself rather than
56
+ inside a card. */
57
+
58
+ header.hero h1 {
59
+ margin: 0 0 var(--space-6, 6px);
60
+ }
61
+
62
+ .generated {
63
+ color: var(--color-text-muted);
64
+ font-size: var(--text-sm, 12px);
65
+ font-weight: 500;
66
+ }
67
+
68
+ .meta-line {
69
+ margin-top: var(--space-4, 4px);
70
+ color: var(--color-text-muted);
71
+ font-size: var(--text-sm, 12px);
72
+ }
73
+
74
+
75
+ /* Artifact-specific styling for Today's AI News ([[index.md]]): the wider
76
+ feed shell, per-source accent props over canonical ramp tokens, the
77
+ source chips, the agent "why" notes, and the three source-shaped cards.
78
+ Chrome colors are semantic tokens; the artifact never redefines them
79
+ ([[../../index.md#^respect-theme]]). */
80
+
81
+ .shell {
82
+ max-width: 760px;
83
+ gap: var(--space-16, 16px);
84
+
85
+ /* Source accents, scoped to this artifact. */
86
+ --hn-color: var(--orange-600);
87
+ --x-color: var(--neutral-950);
88
+ --tm-color: var(--red-600);
89
+ }
90
+
91
+ .feed {
92
+ display: grid;
93
+ gap: var(--space-12, 12px);
94
+ }
95
+
96
+ /* Each source is one card: a brand-colored header band, the body, and a grey
97
+ "Why:" footer. The source color lives only in the header now. */
98
+ .card {
99
+ overflow: hidden;
100
+ border: 1px solid var(--color-border);
101
+ border-radius: var(--radius-12, 12px);
102
+ background: var(--color-surface);
103
+ }
104
+
105
+ .card-header {
106
+ padding: var(--space-10, 10px) var(--space-16, 16px);
107
+ color: var(--white);
108
+ }
109
+ .card.hn .card-header { background: var(--hn-color); }
110
+ .card.x .card-header { background: var(--x-color); }
111
+ .card.tm .card-header { background: var(--tm-color); }
112
+
113
+ /* Small source label, then the item's own title, both inside the band. */
114
+ .card-source {
115
+ font-size: var(--text-xs, 11px);
116
+ font-weight: 700;
117
+ letter-spacing: 0.04em;
118
+ text-transform: uppercase;
119
+ opacity: 0.85;
120
+ }
121
+ .card-title {
122
+ display: block;
123
+ margin-top: var(--space-2, 2px);
124
+ color: var(--white);
125
+ font-size: var(--text-base, 13.5px);
126
+ font-weight: 600;
127
+ line-height: 1.3;
128
+ text-decoration: none;
129
+ }
130
+ a.card-title:hover {
131
+ text-decoration: underline;
132
+ }
133
+ /* Source metadata (domain / timestamp / outlet) under the title, dimmed. */
134
+ .card-meta {
135
+ margin-top: var(--space-4, 4px);
136
+ color: var(--white);
137
+ font-size: var(--text-sm, 12px);
138
+ opacity: 0.75;
139
+ }
140
+ /* X: author name is the title; handle rides alongside it, dimmed. */
141
+ .x-handle-h {
142
+ margin-left: var(--space-4, 4px);
143
+ font-weight: 400;
144
+ opacity: 0.7;
145
+ }
146
+ .x-handle-h::before {
147
+ content: "@";
148
+ }
149
+
150
+ .card-body {
151
+ padding: var(--space-12, 12px) var(--space-16, 16px);
152
+ }
153
+
154
+ .card-footer {
155
+ padding: var(--space-8, 8px) var(--space-16, 16px);
156
+ border-top: 1px solid var(--color-border-muted);
157
+ background: var(--color-surface-muted);
158
+ color: var(--color-text-muted);
159
+ font-size: var(--text-sm, 12px);
160
+ line-height: 1.4;
161
+ }
162
+ .card-footer::before {
163
+ content: "Why: ";
164
+ font-weight: 600;
165
+ color: var(--color-text);
166
+ }
167
+
168
+ /* Hacker News body. */
169
+ .hn-subhead {
170
+ margin: 0;
171
+ color: var(--color-text-muted);
172
+ font-size: var(--text-sm, 12px);
173
+ line-height: 1.4;
174
+ }
175
+ .hn-stats {
176
+ display: flex;
177
+ flex-wrap: wrap;
178
+ gap: var(--space-16, 16px);
179
+ margin: var(--space-10, 10px) 0 0;
180
+ }
181
+ .hn-stat {
182
+ display: flex;
183
+ align-items: center;
184
+ gap: var(--space-4, 4px);
185
+ color: var(--color-text-muted);
186
+ font-size: var(--text-sm, 12px);
187
+ }
188
+ .hn-stat strong {
189
+ color: var(--color-text);
190
+ font-weight: 600;
191
+ }
192
+ .hn-discussion {
193
+ color: var(--hn-color);
194
+ font-size: var(--text-sm, 12px);
195
+ text-decoration: none;
196
+ }
197
+ .hn-discussion:hover {
198
+ text-decoration: underline;
199
+ }
200
+ .hn-tags {
201
+ display: flex;
202
+ flex-wrap: wrap;
203
+ gap: var(--space-6, 6px);
204
+ margin: var(--space-8, 8px) 0 0;
205
+ }
206
+ .hn-tag {
207
+ display: inline-flex;
208
+ padding: 2px var(--space-8, 8px);
209
+ border: 1px solid var(--color-border);
210
+ border-radius: var(--radius-full, 9999px);
211
+ background: var(--color-surface-muted);
212
+ color: var(--color-text-muted);
213
+ font-size: var(--text-sm, 12px);
214
+ }
215
+
216
+ /* X body. */
217
+ .x-text {
218
+ margin: 0;
219
+ color: var(--color-text);
220
+ font-size: var(--text-base, 13.5px);
221
+ line-height: 1.45;
222
+ white-space: pre-wrap;
223
+ word-wrap: break-word;
224
+ }
225
+ .x-text a {
226
+ color: var(--color-link);
227
+ text-decoration: none;
228
+ }
229
+ .x-text a:hover {
230
+ text-decoration: underline;
231
+ }
232
+ .x-stats {
233
+ display: flex;
234
+ gap: var(--space-24, 24px);
235
+ margin: var(--space-12, 12px) 0 0;
236
+ padding-top: var(--space-10, 10px);
237
+ border-top: 1px solid var(--color-border-muted);
238
+ }
239
+ .x-stat {
240
+ display: flex;
241
+ align-items: center;
242
+ gap: var(--space-6, 6px);
243
+ color: var(--color-text-muted);
244
+ font-size: var(--text-sm, 12px);
245
+ }
246
+ .x-stat strong {
247
+ color: var(--color-text);
248
+ font-weight: 600;
249
+ }
250
+
251
+ /* TechMeme body. */
252
+ .tm-excerpt {
253
+ margin: 0 0 var(--space-8, 8px);
254
+ color: var(--color-text-muted);
255
+ font-size: var(--text-sm, 12px);
256
+ line-height: 1.45;
257
+ }
258
+ .tm-related {
259
+ color: var(--color-text-muted);
260
+ font-size: var(--text-sm, 12px);
261
+ line-height: 1.5;
262
+ }
263
+ .tm-related-label {
264
+ color: var(--tm-color);
265
+ font-weight: 700;
266
+ }
267
+ .tm-related a {
268
+ color: var(--color-text-muted);
269
+ text-decoration: none;
270
+ }
271
+ .tm-related a:hover {
272
+ color: var(--color-link);
273
+ text-decoration: underline;
274
+ }
275
+ .tm-related-sep {
276
+ margin: 0 var(--space-2, 2px);
277
+ opacity: 0.3;
278
+ }
279
+
280
+ @media (max-width: 520px) {
281
+ .x-stats { gap: var(--space-16, 16px); }
282
+ }
283
+
284
+ </style>
285
+ </head>
286
+ <body>
287
+
288
+
289
+
290
+
291
+
292
+ <main class="shell">
293
+ <header class="hero">
294
+ <h1>Today's AI News</h1>
295
+ <div class="meta-line">38 posts read across Hacker News, X, and TechMeme · 7 selected by relevance</div>
296
+ </header>
297
+
298
+ <div class="feed">
299
+
300
+
301
+ <article class="card hn">
302
+ <div class="card-header">
303
+ <div class="card-source">Hacker News</div>
304
+
305
+ <a class="card-title" href="https://news.ycombinator.com/item?id=42901234" target="_blank" rel="noopener">Why Open Models Are Critical to the Future of Computing</a>
306
+ <div class="card-meta">openweights.blog</div>
307
+
308
+ </div>
309
+ <div class="card-body">
310
+
311
+ <p class="hn-subhead">A front-page essay argues that open models — weights you can download, inspect, modify, and run on your own hardware — are the only path that preserves user sovereignty, privacy, censorship resistance, low latency, and cost control. The thread also rounds up recent open model releases: GLM-4.6-405B, Llama-4-70B, Mistral-Large-2, DeepSeek-V3, and Qwen-3-72B. Commenters debate whether the frontier gap is closing fast enough to matter for production deployments.</p>
312
+ <div class="hn-stats">
313
+ <span class="hn-stat">▲ <strong>927</strong> points</span>
314
+ <span class="hn-stat">💬 <strong>413</strong> comments</span>
315
+ <a class="hn-discussion" href="https://news.ycombinator.com/item?id=42901234" target="_blank" rel="noopener">view discussion →</a>
316
+ </div>
317
+ <div class="hn-tags">
318
+
319
+ <span class="hn-tag">open-models</span>
320
+
321
+ <span class="hn-tag">llm</span>
322
+
323
+ <span class="hn-tag">sovereignty</span>
324
+
325
+ <span class="hn-tag">privacy</span>
326
+
327
+ <span class="hn-tag">latency</span>
328
+
329
+ </div>
330
+
331
+ </div>
332
+ <div class="card-footer">You've been thinking and writing a lot about open models lately.</div>
333
+ </article>
334
+
335
+
336
+ <article class="card x">
337
+ <div class="card-header">
338
+ <div class="card-source">X</div>
339
+
340
+ <div class="card-title">Marcus Vane <span class="x-handle-h">marcusvane</span></div>
341
+ <div class="card-meta">3h ago</div>
342
+
343
+ </div>
344
+ <div class="card-body">
345
+
346
+ <div class="x-text">most AI startups are building for the demo, not the deployment. the enterprise buyers i talk to care about three things: does it work reliably, can i audit what it did, and can i roll it back. "autonomy" is maybe 4th on the list. maybe.</div>
347
+ <div class="x-stats">
348
+ <div class="x-stat">💬 <strong>287</strong> replies</div>
349
+ <div class="x-stat">🔁 <strong>1.2K</strong> reposts</div>
350
+ <div class="x-stat">❤️ <strong>5.8K</strong> likes</div>
351
+ <div class="x-stat">📊 <strong>89K</strong> views</div>
352
+ </div>
353
+
354
+ </div>
355
+ <div class="card-footer">Validates the Acme pilot positioning — auditability and rollback over autonomy is exactly what you're betting on.</div>
356
+ </article>
357
+
358
+
359
+ <article class="card x">
360
+ <div class="card-header">
361
+ <div class="card-source">X</div>
362
+
363
+ <div class="card-title">Nadia Okonkwo <span class="x-handle-h">nadiaoko</span></div>
364
+ <div class="card-meta">6h ago</div>
365
+
366
+ </div>
367
+ <div class="card-body">
368
+
369
+ <div class="x-text">we just open-sourced an eval framework for agentic workflows — regression thresholds, latency budgets, rollback traces, all configurable. 2k stars in 6 hours. link in reply 👇
370
+
371
+ the best part: it plugs into CI with 3 lines of yaml. no vendor lock-in. no managed service upsell. just the harness.</div>
372
+ <div class="x-stats">
373
+ <div class="x-stat">💬 <strong>94</strong> replies</div>
374
+ <div class="x-stat">🔁 <strong>2.1K</strong> reposts</div>
375
+ <div class="x-stat">❤️ <strong>7.3K</strong> likes</div>
376
+ <div class="x-stat">📊 <strong>120K</strong> views</div>
377
+ </div>
378
+
379
+ </div>
380
+ <div class="card-footer">This is likely the same framework that showed up as HN #1 today — worth evaluating for the Priya eval ownership discussion.</div>
381
+ </article>
382
+
383
+
384
+ <article class="card hn">
385
+ <div class="card-header">
386
+ <div class="card-source">Hacker News</div>
387
+
388
+ <a class="card-title" href="https://news.ycombinator.com/item?id=42900721" target="_blank" rel="noopener">How we cut our LLM inference latency by 60% with streaming + speculative decoding</a>
389
+ <div class="card-meta">eng.blog</div>
390
+
391
+ </div>
392
+ <div class="card-body">
393
+
394
+ <p class="hn-subhead">Engineering deep-dive on reducing p99 latency for agentic workloads using speculative decoding and chunked streaming, with benchmark code included. Covers tradeoffs between accuracy loss and latency gains across three model families.</p>
395
+ <div class="hn-stats">
396
+ <span class="hn-stat">▲ <strong>176</strong> points</span>
397
+ <span class="hn-stat">💬 <strong>63</strong> comments</span>
398
+ <a class="hn-discussion" href="https://news.ycombinator.com/item?id=42900721" target="_blank" rel="noopener">view discussion →</a>
399
+ </div>
400
+ <div class="hn-tags">
401
+
402
+ <span class="hn-tag">latency</span>
403
+
404
+ <span class="hn-tag">inference</span>
405
+
406
+ <span class="hn-tag">engineering</span>
407
+
408
+ </div>
409
+
410
+ </div>
411
+ <div class="card-footer">The latency issues that came up in the Product Reliability Sync could benefit from this approach.</div>
412
+ </article>
413
+
414
+
415
+ <article class="card tm">
416
+ <div class="card-header">
417
+ <div class="card-source">TechMeme</div>
418
+
419
+ <a class="card-title" href="https://techmeme.com/clip" target="_blank" rel="noopener">Mistral releases Mixtral 12B with Apache 2.0 license; benchmarks show parity with leading hosted mini models on tool-use at 1/8 the cost</a>
420
+ <div class="card-meta">TechCrunch · 8h ago</div>
421
+
422
+ </div>
423
+ <div class="card-body">
424
+
425
+ <p class="tm-excerpt">French AI lab Mistral published Mixtral 12B under Apache 2.0, with a Mixture-of-Experts architecture active at 4B parameters per token. Independent benchmarks on the AgentBench-2.0 agentic suite score it at parity with leading hosted mini models while running at roughly $0.30/M input tokens on self-hosted A100s.</p>
426
+ <div class="tm-related">
427
+ <span class="tm-related-label">More:</span>
428
+
429
+ <a href="#" target="_blank">The Register</a><span class="tm-related-sep">/</span>
430
+
431
+ <a href="#" target="_blank">VentureBeat</a><span class="tm-related-sep">/</span>
432
+
433
+ <a href="#" target="_blank">Hacker News (298↑)</a>
434
+
435
+ </div>
436
+
437
+ </div>
438
+ <div class="card-footer">Apache 2.0 with tool-use parity is worth a spike — could reduce per-workflow inference cost for the Acme pilot significantly.</div>
439
+ </article>
440
+
441
+
442
+ <article class="card hn">
443
+ <div class="card-header">
444
+ <div class="card-source">Hacker News</div>
445
+
446
+ <a class="card-title" href="https://news.ycombinator.com/item?id=42900555" target="_blank" rel="noopener">Seed funding landscape Q3 2026: AI rounds are closing faster but valuations are flattening</a>
447
+ <div class="card-meta">pitchbook.com</div>
448
+
449
+ </div>
450
+ <div class="card-body">
451
+
452
+ <p class="hn-subhead">Analysis of 120 seed rounds shows AI startups are raising 2-3x faster than last year, but median valuations have plateaued as investors demand more proof of revenue. The median time-to-close dropped from 8 weeks to 3 weeks.</p>
453
+ <div class="hn-stats">
454
+ <span class="hn-stat">▲ <strong>256</strong> points</span>
455
+ <span class="hn-stat">💬 <strong>98</strong> comments</span>
456
+ <a class="hn-discussion" href="https://news.ycombinator.com/item?id=42900555" target="_blank" rel="noopener">view discussion →</a>
457
+ </div>
458
+ <div class="hn-tags">
459
+
460
+ <span class="hn-tag">fundraising</span>
461
+
462
+ <span class="hn-tag">seed</span>
463
+
464
+ <span class="hn-tag">valuation</span>
465
+
466
+ </div>
467
+
468
+ </div>
469
+ <div class="card-footer">Relevant to your investor update with Jake — sets context for what investors are seeing across the market right now.</div>
470
+ </article>
471
+
472
+
473
+ <article class="card x">
474
+ <div class="card-header">
475
+ <div class="card-source">X</div>
476
+
477
+ <div class="card-title">Lena Park <span class="x-handle-h">lenapark</span></div>
478
+ <div class="card-meta">14h ago</div>
479
+
480
+ </div>
481
+ <div class="card-body">
482
+
483
+ <div class="x-text">hot take: the "eval harness" conversation is the most important infra convo in AI right now.
484
+
485
+ if you can't define what "good enough" means, you can't ship reliably, and if you can't ship reliably, enterprise won't buy.
486
+
487
+ it's not a QA problem, it's a go-to-market problem.</div>
488
+ <div class="x-stats">
489
+ <div class="x-stat">💬 <strong>156</strong> replies</div>
490
+ <div class="x-stat">🔁 <strong>847</strong> reposts</div>
491
+ <div class="x-stat">❤️ <strong>3.4K</strong> likes</div>
492
+ <div class="x-stat">📊 <strong>54K</strong> views</div>
493
+ </div>
494
+
495
+ </div>
496
+ <div class="card-footer">Directly relevant to the eval harness ownership decision you're discussing with Priya today.</div>
497
+ </article>
498
+
499
+ </div>
500
+ </main>
501
+
502
+ </body>
503
+ </html>
@@ -23,7 +23,7 @@
23
23
  font-size: 15px;
24
24
  }
25
25
 
26
- ui-icon {
26
+ tv-icon {
27
27
  position: relative;
28
28
  top: 1px;
29
29
  color: var(--color-text-muted);
@@ -181,9 +181,9 @@
181
181
 
182
182
  <p class="lede">Television is the missing GUI for your personal agent, created by the team at Telepath. We’re glad you’re here.</p>
183
183
 
184
- <p>This card is an <ui-icon name="subtract-square" weight="duotone"></ui-icon> <strong>Artifact</strong>: a live surface your agent can create, edit, and update. Artifacts can be notes, editable documents, dashboards, web pages, reports, or custom web apps.</p>
184
+ <p>This card is an <tv-icon name="subtract-square" weight="duotone"></tv-icon> <strong>Artifact</strong>: a live surface your agent can create, edit, and update. Artifacts can be notes, editable documents, dashboards, web pages, reports, or custom web apps.</p>
185
185
 
186
- <p>Artifacts live on <ui-icon name="squares-four" weight="duotone"></ui-icon> <strong>Screens</strong>. We put you on <strong>TV Guide</strong> to start. Double-click its name to rename it, use <ui-icon name="plus" weight="bold"></ui-icon> to add more screens, and drag artifacts to arrange them. Your open screens appear as tabs up the top. If you close one, you can find it again by clicking <ui-icon name="squares-four" weight="bold"></ui-icon>.</p>
186
+ <p>Artifacts live on <tv-icon name="squares-four" weight="duotone"></tv-icon> <strong>Screens</strong>. We put you on <strong>TV Guide</strong> to start. Double-click its name to rename it, use <tv-icon name="plus" weight="bold"></tv-icon> to add more screens, and drag artifacts to arrange them. Your open screens appear as tabs up the top. If you close one, you can find it again by clicking <tv-icon name="squares-four" weight="bold"></tv-icon>.</p>
187
187
 
188
188
  <p>To create or change an artifact, just describe what you want to see. Try asking your agent…</p>
189
189
 
@@ -196,8 +196,8 @@
196
196
  <p>Your agent will usually know when to answer by creating an artifact. If it replies in chat instead, just say: “put that on my TV.”</p>
197
197
 
198
198
  <section class="callout">
199
- <h2><svg class="callout-icon" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 256 256" fill="currentColor" aria-hidden="true"><g transform="translate(256 0) scale(-1 1)"><path d="M240,120a40,40,0,0,1-40,40H160V80h40A40,40,0,0,1,240,120Z" opacity="0.2"/><path d="M248,120a48.05,48.05,0,0,0-48-48H160.2c-2.91-.17-53.62-3.74-101.91-44.24A16,16,0,0,0,32,40V200a16,16,0,0,0,26.29,12.25c37.77-31.68,77-40.76,93.71-43.3v31.72A16,16,0,0,0,159.12,214l11,7.33A16,16,0,0,0,194.5,212l11.77-44.36A48.07,48.07,0,0,0,248,120ZM48,199.93V40h0c42.81,35.91,86.63,45,104,47.24v65.48C134.65,155,90.84,164.07,48,199.93Zm131,8,0,.11-11-7.33V168h21.6ZM200,152H168V88h32a32,32,0,1,1,0,64Z"/></g></svg>Spread the word</h2>
200
- <p>Television isn’t public yet, but it’s not a secret. If you make something cool, we’d love you to share it!</p>
199
+ <h2><svg class="callout-icon" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 256 256" fill="currentColor" aria-hidden="true"><path d="M208,104a79.86,79.86,0,0,1-30.59,62.92A24.29,24.29,0,0,0,168,186v6a8,8,0,0,1-8,8H96a8,8,0,0,1-8-8v-6a24.11,24.11,0,0,0-9.3-19A79.87,79.87,0,0,1,48,104.45C47.76,61.09,82.72,25,126.07,24A80,80,0,0,1,208,104Z" opacity="0.2"/><path d="M176,232a8,8,0,0,1-8,8H88a8,8,0,0,1,0-16h80A8,8,0,0,1,176,232Zm40-128a87.55,87.55,0,0,1-33.64,69.21A16.24,16.24,0,0,0,176,186v6a16,16,0,0,1-16,16H96a16,16,0,0,1-16-16v-6a16,16,0,0,0-6.23-12.66A87.59,87.59,0,0,1,40,104.49C39.74,56.83,78.26,17.14,125.88,16A88,88,0,0,1,216,104Zm-16,0a72,72,0,0,0-73.74-72c-39,.92-70.47,33.39-70.26,72.39a71.65,71.65,0,0,0,27.64,56.3A32,32,0,0,1,96,186v6h64v-6a32.15,32.15,0,0,1,12.47-25.35A71.65,71.65,0,0,0,200,104Zm-16.11-9.34a57.6,57.6,0,0,0-46.56-46.55,8,8,0,0,0-2.66,15.78c16.57,2.79,30.63,16.85,33.44,33.45A8,8,0,0,0,176,104a9,9,0,0,0,1.35-.11A8,8,0,0,0,183.89,94.66Z"/></svg>More examples</h2>
200
+ <p>See the screens above for other examples of how to use Television. (You can close or delete these screens whenever you like; they're just there to give you ideas!)</p>
201
201
  </section>
202
202
  </body>
203
203
  </html>
@@ -45,6 +45,10 @@ That relationship matters:
45
45
  - deleting an artifact removes its registry record and its card from the screen
46
46
  - moving the same underlying path or URL to another screen means deleting the old artifact and creating a new artifact with the same path or URL on the target screen
47
47
 
48
+ ### Onboarding screens
49
+
50
+ Fresh installations receive a small set of bundled onboarding screens, each installed exactly once per storage directory. After installation they are ordinary screens: rename, edit, or delete them like any other, and Television never re-creates or overwrites what changed. You can tell one apart from a user-created screen by the `onboarding` marker (slug and install order) persisted in its screen metadata — visible in `tv list-screens` / `tv get-screen` output; user-created screens have no such field. The marker changes nothing about how you manage the screen.
51
+
48
52
  ### Artifact shapes
49
53
 
50
54
  Television artifacts point to one of three shapes:
@@ -494,6 +498,29 @@ blockquotes, rules, images, and tables have readable defaults. Add local CSS for
494
498
  artifact-specific layout, density, hierarchy, or specialized presentations; do
495
499
  not recreate baseline prose styling in every artifact.
496
500
 
501
+ ## Page header
502
+
503
+ A page header is optional — the Television card already names the artifact in
504
+ its title bar, so don't add one just to repeat that. Add one when the document
505
+ benefits from its own masthead: a title that differs from or says more than
506
+ the card name, or a subtitle line carrying context like a date, a person, or
507
+ a status.
508
+
509
+ When you do, use the house header idiom — a `<header>` holding an `<h1>` and
510
+ optionally one `<p>` subtitle:
511
+
512
+ ```html
513
+ <header>
514
+ <h1>Quarterly plan</h1>
515
+ <p>Friday, June 26</p>
516
+ </header>
517
+ ```
518
+
519
+ A `<p>` inside any `<header>` renders as a subtitle — slightly smaller than
520
+ body prose, at body weight, hugging its heading; proximity and the heading
521
+ above do the differentiating. The idiom is house language: use it as-is,
522
+ don't restyle it per artifact.
523
+
497
524
  For prose-like documents, consider giving the content enough room above the bottom title bar. A reasonable starting point is 32px padding on the top and sides, with 64px at the bottom; adjust based on the content and layout:
498
525
 
499
526
  ```css
@@ -569,6 +596,23 @@ checkbox-item::part(box) {
569
596
  }
570
597
  ```
571
598
 
599
+ ### Icons
600
+
601
+ `<tv-icon name="…" size="16|24|32">` renders a glyph from the canonical
602
+ catalog. The catalog is small and closed — these are the only valid names:
603
+
604
+ - `calendar-blank`
605
+ - `hash`
606
+ - `plus`
607
+ - `squares-four`
608
+ - `subtract-square`
609
+ - `television`
610
+
611
+ Do not invent other names (an unknown name silently renders the
612
+ `subtract-square` fallback, which looks like a broken glyph). If no glyph
613
+ fits, use text without an icon; if a glyph is genuinely needed and none
614
+ fits, use an emoji instead of `<tv-icon>`.
615
+
572
616
  ## Viewport
573
617
 
574
618
  Artifacts render inside a resizable Television card, not a full browser page.