linersh 1.0.0 → 1.0.2
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 +26 -1
- package/bin/liner.js +6 -0
- package/dist/agents/artifact-validation.js +65 -2
- package/dist/agents/artifact-validation.js.map +1 -1
- package/dist/agents/prompts.js +3 -1
- package/dist/agents/prompts.js.map +1 -1
- package/package.json +1 -1
- package/cli-update-docs/ABOUT.md +0 -69
- package/cli-update-docs/AI-HANDOFF.md +0 -99
- package/cli-update-docs/CURATION.md +0 -290
- package/cli-update-docs/JTBD-MASTER-PROMPT-ABOUT.md +0 -130
- package/cli-update-docs/JTBD-MASTER-PROMPT.md +0 -147
- package/cli-update-docs/LINER-MASTER.md +0 -560
- package/cli-update-docs/LINER-MD-PRD.md +0 -531
- package/cli-update-docs/MIXTAPE-FORMAT.md +0 -430
- package/cli-update-docs/PLATFORM.md +0 -211
- package/cli-update-docs/TUI-BACKLOG.md +0 -334
|
@@ -1,560 +0,0 @@
|
|
|
1
|
-
# Liner Master Overview
|
|
2
|
-
|
|
3
|
-
This document explains what Liner is, how it works, how it is built, how it is used, and where it fits relative to skills, AI projects, notebooks, and ordinary source lists.
|
|
4
|
-
|
|
5
|
-
## Short Version
|
|
6
|
-
|
|
7
|
-
Liner is an open-source toolkit for building curated AI context bundles called **mixtapes**.
|
|
8
|
-
|
|
9
|
-
A Liner project is a folder. Its mixtape corpus lives under `mixtape/` in v2 projects and contains:
|
|
10
|
-
|
|
11
|
-
- a recipe, `mixtape/tape.yaml`
|
|
12
|
-
- a curator synthesis, `mixtape/synthesis.md`
|
|
13
|
-
- extracted source files in `mixtape/sources/`
|
|
14
|
-
- optional working notes in `mixtape/working/`
|
|
15
|
-
- a compiled master file, `mixtape/MIXTAPE.md`
|
|
16
|
-
|
|
17
|
-
The point is simple: AI systems are much better when they are given a thoughtful, domain-specific context bundle instead of a pile of random links or whatever happens to be in the model's training data.
|
|
18
|
-
|
|
19
|
-
Liner makes that context bundle portable, inspectable, repeatable, and shareable.
|
|
20
|
-
|
|
21
|
-
## The Premise
|
|
22
|
-
|
|
23
|
-
Most AI work is bottlenecked by context quality.
|
|
24
|
-
|
|
25
|
-
If you ask an AI for mobile design feedback with no extra context, it leans on general knowledge. If you give it a carefully curated bundle of Apple HIG references, touch-target research, practitioner essays, pattern critiques, and your own synthesis of how those sources fit together, the answer gets more specific and more useful.
|
|
26
|
-
|
|
27
|
-
That pattern applies across domains:
|
|
28
|
-
|
|
29
|
-
- designing a native iOS app
|
|
30
|
-
- evaluating CLI/TUI interaction patterns
|
|
31
|
-
- choosing an API architecture
|
|
32
|
-
- writing an onboarding guide for a team
|
|
33
|
-
- reviewing product strategy
|
|
34
|
-
- building a hiring rubric
|
|
35
|
-
- understanding a technical standard
|
|
36
|
-
- comparing implementation approaches
|
|
37
|
-
|
|
38
|
-
The hard part is not just collecting links. The hard part is curating sources against a specific job-to-be-done, extracting the useful content, explaining why each source matters, and packaging the result so any AI tool can use it.
|
|
39
|
-
|
|
40
|
-
That is what Liner does.
|
|
41
|
-
|
|
42
|
-
## Core Terms
|
|
43
|
-
|
|
44
|
-
### Tape
|
|
45
|
-
|
|
46
|
-
A **tape** is the recipe. It lives in `mixtape/tape.yaml` in v2 projects.
|
|
47
|
-
|
|
48
|
-
It names the mixtape, describes its purpose, identifies the curator, and lists the kept sources with notes, sections, and source metadata.
|
|
49
|
-
|
|
50
|
-
The tape is small and shareable. It can be edited by hand, stored in Git, reviewed in a pull request, forked, or recompiled later.
|
|
51
|
-
|
|
52
|
-
### Mixtape
|
|
53
|
-
|
|
54
|
-
A **mixtape** is the corpus inside the project folder.
|
|
55
|
-
|
|
56
|
-
It includes the tape, the curator's synthesis, extracted source content, working notes, and compiled output.
|
|
57
|
-
|
|
58
|
-
### Consumable Mixtape
|
|
59
|
-
|
|
60
|
-
The **consumable mixtape** is what an AI actually reads: `mixtape/MIXTAPE.md` plus the referenced files in `mixtape/sources/`.
|
|
61
|
-
|
|
62
|
-
`MIXTAPE.md` contains the curator synthesis, a source index, and links to the extracted source files.
|
|
63
|
-
|
|
64
|
-
### Curator
|
|
65
|
-
|
|
66
|
-
The **curator** is the person shaping the context bundle.
|
|
67
|
-
|
|
68
|
-
The curator's job is not to collect everything. It is to decide what belongs, what does not, what each source contributes, and what the AI should understand before using the sources.
|
|
69
|
-
|
|
70
|
-
## What Liner Produces
|
|
71
|
-
|
|
72
|
-
A compiled project folder looks like this:
|
|
73
|
-
|
|
74
|
-
```text
|
|
75
|
-
mobile-design-foundations/
|
|
76
|
-
|-- liner.yaml
|
|
77
|
-
|-- LINER.md
|
|
78
|
-
|-- SKILL.md
|
|
79
|
-
|-- skills/
|
|
80
|
-
|-- working/
|
|
81
|
-
`-- mixtape/
|
|
82
|
-
|-- MIXTAPE.md
|
|
83
|
-
|-- tape.yaml
|
|
84
|
-
|-- synthesis.md
|
|
85
|
-
|-- sources/
|
|
86
|
-
| |-- 01-touch-target-size.md
|
|
87
|
-
| |-- 02-apple-gestures.md
|
|
88
|
-
| `-- ...
|
|
89
|
-
|-- local-sources/
|
|
90
|
-
| `-- touch-target-paper.pdf
|
|
91
|
-
`-- working/
|
|
92
|
-
|-- 01-jtbd-and-knowledge-map.md
|
|
93
|
-
|-- 02-candidate-longlist.md
|
|
94
|
-
|-- 03-evaluation.yaml
|
|
95
|
-
|-- 04-quality-checks.md
|
|
96
|
-
`-- 07-tape-draft.yaml
|
|
97
|
-
```
|
|
98
|
-
|
|
99
|
-
`mixtape/tape.yaml` is the source recipe. `mixtape/synthesis.md` is the curator's distilled framing. `mixtape/sources/` contains extracted content. `mixtape/working/` contains the curation trace. `mixtape/MIXTAPE.md` is the compiled entry point.
|
|
100
|
-
|
|
101
|
-
## What Liner Is Good For
|
|
102
|
-
|
|
103
|
-
Liner is good when the AI needs durable, domain-specific context and when source choice matters.
|
|
104
|
-
|
|
105
|
-
Examples:
|
|
106
|
-
|
|
107
|
-
- **Mobile design foundations**: Apple HIG pages, touch target research, gesture references, accessibility guidance, and a synthesis of how native mobile conventions fit together.
|
|
108
|
-
- **CLI/TUI design**: command-line UX talks, terminal UI framework docs, interaction design principles, and examples of developer tools that feel good to use.
|
|
109
|
-
- **API design migration**: internal docs, public API guidelines, REST/GraphQL trade-off essays, platform-specific constraints, and migration examples.
|
|
110
|
-
- **Hiring rubrics**: calibration documents, role expectations, interview design references, examples of good and bad signals, and a curator-written evaluation philosophy.
|
|
111
|
-
- **Product strategy context**: market notes, user research excerpts, competitor docs, positioning essays, and a synthesis of what decisions the team is trying to make.
|
|
112
|
-
- **Technical standards**: RFCs, official docs, canonical papers, implementation notes, and practitioner critiques.
|
|
113
|
-
- **Design system audits**: internal component docs, accessibility standards, platform guidelines, usage examples, and known exceptions.
|
|
114
|
-
|
|
115
|
-
Liner works especially well when:
|
|
116
|
-
|
|
117
|
-
- the topic is narrower than a whole field
|
|
118
|
-
- the job-to-be-done is explicit
|
|
119
|
-
- sources include primary or canonical material
|
|
120
|
-
- the curator can explain why each source belongs
|
|
121
|
-
- the output will be reused across many AI conversations or tools
|
|
122
|
-
|
|
123
|
-
## What Liner Is Not Good For
|
|
124
|
-
|
|
125
|
-
Liner is not the right tool for every context problem.
|
|
126
|
-
|
|
127
|
-
It is usually not good for:
|
|
128
|
-
|
|
129
|
-
- **One-off questions** where a quick search is enough.
|
|
130
|
-
- **Huge document corpora** where retrieval over thousands of files is the real task.
|
|
131
|
-
- **Real-time monitoring** where the source set changes constantly.
|
|
132
|
-
- **Private data you cannot safely store in a project folder.**
|
|
133
|
-
- **Bypassing paywalls or access controls.** If a source is gated, you need legitimate access and should use `local_file` only for material you are allowed to use.
|
|
134
|
-
- **Pure reading lists for humans.** A mixtape is optimized for AI context, not for teaching a human in a pleasant sequence.
|
|
135
|
-
- **Automatic truth.** Liner can package sources and expose provenance, but it does not guarantee the sources are correct.
|
|
136
|
-
- **Generic topic overviews.** A broad "everything about design" mixtape will usually be shallow and noisy.
|
|
137
|
-
|
|
138
|
-
The key test is: will a curated context bundle make an AI meaningfully better at a specific job? If not, Liner is probably more ceremony than value.
|
|
139
|
-
|
|
140
|
-
## How Liner Is Used
|
|
141
|
-
|
|
142
|
-
There are three common ways to use Liner.
|
|
143
|
-
|
|
144
|
-
### 1. CLI-First
|
|
145
|
-
|
|
146
|
-
Use the Python CLI when you already have a project folder or prefer editing YAML and Markdown directly.
|
|
147
|
-
|
|
148
|
-
```sh
|
|
149
|
-
liner init mobile-design-foundations
|
|
150
|
-
# edit mobile-design-foundations/mixtape/tape.yaml
|
|
151
|
-
# write mobile-design-foundations/mixtape/synthesis.md
|
|
152
|
-
liner compile mobile-design-foundations
|
|
153
|
-
```
|
|
154
|
-
|
|
155
|
-
The compile step fetches and extracts sources, then writes:
|
|
156
|
-
|
|
157
|
-
- `mixtape/MIXTAPE.md`
|
|
158
|
-
- `mixtape/sources/NN-*.md`
|
|
159
|
-
|
|
160
|
-
To share:
|
|
161
|
-
|
|
162
|
-
```sh
|
|
163
|
-
liner share mobile-design-foundations
|
|
164
|
-
liner import mobile-design-foundations.mixtape
|
|
165
|
-
```
|
|
166
|
-
|
|
167
|
-
### 2. TUI-First
|
|
168
|
-
|
|
169
|
-
Use the terminal UI when you want an interactive authoring experience.
|
|
170
|
-
|
|
171
|
-
```sh
|
|
172
|
-
npx linersh
|
|
173
|
-
```
|
|
174
|
-
|
|
175
|
-
The TUI helps create and edit mixtape project folders, add sources, edit metadata, run compilation, share archives, and inspect process manifests.
|
|
176
|
-
|
|
177
|
-
With no arguments, the `liner` npm package opens the TUI. CLI subcommands pass through to the bundled Python core:
|
|
178
|
-
|
|
179
|
-
```sh
|
|
180
|
-
liner compile mobile-design-foundations
|
|
181
|
-
liner setup-js
|
|
182
|
-
liner share mobile-design-foundations
|
|
183
|
-
```
|
|
184
|
-
|
|
185
|
-
### 3. Skill-Assisted Curation
|
|
186
|
-
|
|
187
|
-
Use the `curating-mixtapes` skill when you want an AI assistant to run the curation methodology with you.
|
|
188
|
-
|
|
189
|
-
The skill produces a project folder with:
|
|
190
|
-
|
|
191
|
-
- `mixtape/tape.yaml`
|
|
192
|
-
- `mixtape/synthesis.md`
|
|
193
|
-
- `mixtape/working/*` notes
|
|
194
|
-
|
|
195
|
-
The skill does not compile. After the skill finishes, run:
|
|
196
|
-
|
|
197
|
-
```sh
|
|
198
|
-
liner compile <project-folder>
|
|
199
|
-
```
|
|
200
|
-
|
|
201
|
-
## The Curation Lifecycle
|
|
202
|
-
|
|
203
|
-
The current TUI-driven flow has six authoring phases plus Compile. The empirical test remains methodology guidance for library-quality mixtapes, not a required TUI stop.
|
|
204
|
-
|
|
205
|
-
### Phase 1: Framing
|
|
206
|
-
|
|
207
|
-
Define the job-to-be-done, capability brief, knowledge map, and required source roles.
|
|
208
|
-
|
|
209
|
-
The job-to-be-done is not the topic. "Mobile design" is a topic. *"When I'm designing the core UI of a consumer iOS app, I want to follow Apple's interaction conventions while choosing where to deviate visually, so I can ship something that feels native without looking generic"* is a job. The JTBD is written in Job Story form: `When [circumstance], I want [motivation], so I can [outcome].` See [CURATION.md](CURATION.md) Phase 1 and [JTBD-MASTER-PROMPT.md](JTBD-MASTER-PROMPT.md) for the full rubric.
|
|
210
|
-
|
|
211
|
-
The capability brief says what the corpus should make a downstream AI agent better at. Required source roles name the evidence types the corpus must satisfy before source discovery can proceed.
|
|
212
|
-
|
|
213
|
-
### Phase 2: Candidate Discovery
|
|
214
|
-
|
|
215
|
-
Gather more candidate sources than you expect to keep. This phase is about recall, not precision.
|
|
216
|
-
|
|
217
|
-
Good tactics include following citations, mining expert reading lists, searching course syllabi, checking official docs, searching by required source role, and asking AI to critique gaps rather than invent sources.
|
|
218
|
-
|
|
219
|
-
### Phase 3: Evaluation
|
|
220
|
-
|
|
221
|
-
Decide keep, trim, or drop.
|
|
222
|
-
|
|
223
|
-
A kept source should have a specific role. The curator note should explain why the source belongs, what part matters, and any limitations.
|
|
224
|
-
|
|
225
|
-
### Phase 4: Quality Checks
|
|
226
|
-
|
|
227
|
-
Run tests for redundancy, coverage, disagreement, framing gaps, source-kind balance, and required source-role fit.
|
|
228
|
-
|
|
229
|
-
This is where the methodology catches "good but narrow" corpora.
|
|
230
|
-
|
|
231
|
-
### Phase 5: Synthesis
|
|
232
|
-
|
|
233
|
-
Write the curator's distilled understanding of the domain.
|
|
234
|
-
|
|
235
|
-
The synthesis is not a recap. It is the framing the AI should inherit before using the sources.
|
|
236
|
-
|
|
237
|
-
### Phase 6: Assembly
|
|
238
|
-
|
|
239
|
-
Write the final `mixtape/tape.yaml`, order the sources, and prepare for compile.
|
|
240
|
-
|
|
241
|
-
### Compile
|
|
242
|
-
|
|
243
|
-
Fetch every kept source, extract readable content, write `mixtape/sources/`, and produce `mixtape/MIXTAPE.md`.
|
|
244
|
-
|
|
245
|
-
The TUI treats compilation as the completion milestone. A partial compile is still a usable finished state when `MIXTAPE.md` is written; the hub shows "Ready to use — compiled with warnings" and pressing Enter on Compile opens the existing compile result instead of fetching again. Recompile is explicit with `r` from the compile result screen.
|
|
246
|
-
|
|
247
|
-
### Empirical Test (methodology guidance)
|
|
248
|
-
|
|
249
|
-
Ask the same AI question with and without the mixtape. If the answer with the mixtape is not meaningfully better, the mixtape is not earning its place.
|
|
250
|
-
|
|
251
|
-
This is a methodology practice, not a driven step in the TUI. As of v0.5.2 the TUI treats compilation as the completion milestone (*compiled = complete*) and no longer parks you on a trailing empirical-test phase — but the with-vs-without check remains the honest way to know whether a mixtape earns its place.
|
|
252
|
-
|
|
253
|
-
## How Compilation Works
|
|
254
|
-
|
|
255
|
-
`liner compile <folder>` reads the project folder and performs a deterministic build.
|
|
256
|
-
|
|
257
|
-
At a high level:
|
|
258
|
-
|
|
259
|
-
1. Parse and validate `mixtape/tape.yaml`.
|
|
260
|
-
2. Read `mixtape/synthesis.md`.
|
|
261
|
-
3. Fetch or load every source.
|
|
262
|
-
4. Extract readable content.
|
|
263
|
-
5. Use cached content when valid.
|
|
264
|
-
6. Write one file per source into `mixtape/sources/`.
|
|
265
|
-
7. Write `mixtape/MIXTAPE.md`.
|
|
266
|
-
|
|
267
|
-
Supported source types:
|
|
268
|
-
|
|
269
|
-
- `web`
|
|
270
|
-
- `youtube`
|
|
271
|
-
- `local_file`
|
|
272
|
-
|
|
273
|
-
Web sources use `httpx` and `trafilatura` for server-rendered extraction. If a page is JavaScript-walled and Playwright support has been set up, Liner can use headless Chromium. You enable that path once:
|
|
274
|
-
|
|
275
|
-
```sh
|
|
276
|
-
liner setup-js
|
|
277
|
-
```
|
|
278
|
-
|
|
279
|
-
The npm/TUI onboarding offers this setup on first run, and the compile result screen offers it again when a source needs JS rendering. The Chromium download is roughly 150MB.
|
|
280
|
-
|
|
281
|
-
If `trafilatura` itself crashes on a page, the web handlers now keep the source through a tag-stripped HTML fallback where possible and surface a soft warning instead of losing the source to an internal Python exception.
|
|
282
|
-
|
|
283
|
-
YouTube sources use transcript fetching first and fall back through `yt-dlp` where possible.
|
|
284
|
-
|
|
285
|
-
Local files live under the project's `local-sources/` directory or the legacy `personal/` directory and can include Markdown, text, HTML, and PDFs.
|
|
286
|
-
|
|
287
|
-
## How Sharing Works
|
|
288
|
-
|
|
289
|
-
`liner share <folder>` creates a `.mixtape` archive.
|
|
290
|
-
|
|
291
|
-
The archive can include:
|
|
292
|
-
|
|
293
|
-
- the recipe
|
|
294
|
-
- synthesis
|
|
295
|
-
- source files
|
|
296
|
-
- working notes
|
|
297
|
-
- local source files, unless excluded
|
|
298
|
-
|
|
299
|
-
Because compiled source content may include copyrighted or private material, a curator can share just the recipe or exclude local/source content depending on the audience.
|
|
300
|
-
|
|
301
|
-
`liner import <archive>` unpacks a `.mixtape` and can refetch sources locally.
|
|
302
|
-
|
|
303
|
-
## How Liner Is Built
|
|
304
|
-
|
|
305
|
-
Liner has two main implemented surfaces plus supporting documentation and release tooling.
|
|
306
|
-
|
|
307
|
-
### Python Core
|
|
308
|
-
|
|
309
|
-
The Python package is the mechanical core.
|
|
310
|
-
|
|
311
|
-
Important areas:
|
|
312
|
-
|
|
313
|
-
- `src/liner/cli.py` exposes the `liner` command with Typer.
|
|
314
|
-
- `src/liner/tape.py` parses and validates `tape.yaml`.
|
|
315
|
-
- `src/liner/compile.py` orchestrates compilation.
|
|
316
|
-
- `src/liner/handlers/` contains source handlers:
|
|
317
|
-
- `web.py`
|
|
318
|
-
- `web_js.py`
|
|
319
|
-
- `youtube.py`
|
|
320
|
-
- `local_file.py`
|
|
321
|
-
- `src/liner/output/mixtape.py` renders `MIXTAPE.md` and source files.
|
|
322
|
-
- `src/liner/cache.py` manages the local SQLite cache.
|
|
323
|
-
- `src/liner/share.py` handles `.mixtape` archives.
|
|
324
|
-
- `src/liner/manifest.py` aggregates process metadata from agent runs.
|
|
325
|
-
|
|
326
|
-
The Python core can still be installed directly for development or fallback testing:
|
|
327
|
-
|
|
328
|
-
```sh
|
|
329
|
-
pipx install linersh
|
|
330
|
-
```
|
|
331
|
-
|
|
332
|
-
### Terminal UI
|
|
333
|
-
|
|
334
|
-
The active TUI is a Charm-based Go application in `packages/go-tui`.
|
|
335
|
-
`packages/tui` is still the npm package/shim plus the TypeScript headless
|
|
336
|
-
methodology runner; it is no longer the React/Ink TUI implementation. The old
|
|
337
|
-
React/Ink UI is archived for reference under `ink/`.
|
|
338
|
-
|
|
339
|
-
Important areas:
|
|
340
|
-
|
|
341
|
-
- `packages/go-tui/cmd/liner-tui/` starts the active terminal app.
|
|
342
|
-
- `packages/go-tui/internal/app/` owns screen routing, key handling, and UI rendering.
|
|
343
|
-
- `packages/tui/src/yaml-io.ts` reads and writes `tape.yaml`.
|
|
344
|
-
- `packages/tui/src/bin-resolver.ts` finds the Python core.
|
|
345
|
-
- `packages/tui/src/agents/` runs and parses agent-backed methodology phases.
|
|
346
|
-
- `packages/go-tui/internal/core/` streams compile progress from the Python CLI.
|
|
347
|
-
|
|
348
|
-
The TUI does not reimplement core compile/share/import behavior. It shells out to the Python core and reads structured progress events.
|
|
349
|
-
|
|
350
|
-
### npm Distribution
|
|
351
|
-
|
|
352
|
-
The npm package is named `linersh`.
|
|
353
|
-
|
|
354
|
-
It contains the TUI plus a small `bin/liner.js` shim. Platform-specific Python binaries are distributed as optional npm dependencies:
|
|
355
|
-
|
|
356
|
-
- `linersh-darwin-arm64`
|
|
357
|
-
- `linersh-darwin-x64`
|
|
358
|
-
- `linersh-linux-arm64`
|
|
359
|
-
- `linersh-linux-x64`
|
|
360
|
-
- `linersh-win32-x64`
|
|
361
|
-
|
|
362
|
-
This follows the native-binary package pattern used by many developer tools: install the lightweight main package, let npm select the platform package that matches the host, then run the bundled binary.
|
|
363
|
-
|
|
364
|
-
**Windows status:** npm support includes `linersh-win32-x64` as an optional dependency alongside macOS and Linux packages.
|
|
365
|
-
|
|
366
|
-
The shim behavior:
|
|
367
|
-
|
|
368
|
-
- `liner` with no arguments opens the TUI.
|
|
369
|
-
- CLI subcommands such as `compile`, `share`, `setup-js`, and `status` forward to the bundled Python binary.
|
|
370
|
-
- `LINER_BIN=/path/to/liner` overrides binary resolution for development/debugging.
|
|
371
|
-
- `liner uninstall` removes local Liner state, the npm `_npx` execution cache, and Playwright's Chromium cache for clean reinstall testing. It does not delete mixtape project folders.
|
|
372
|
-
|
|
373
|
-
### Platform Builds
|
|
374
|
-
|
|
375
|
-
Platform packages are built with PyInstaller.
|
|
376
|
-
|
|
377
|
-
Build script:
|
|
378
|
-
|
|
379
|
-
```sh
|
|
380
|
-
python3 scripts/build-platform-package.py
|
|
381
|
-
```
|
|
382
|
-
|
|
383
|
-
Validation:
|
|
384
|
-
|
|
385
|
-
```sh
|
|
386
|
-
python3 scripts/validate-platform-package.py --pack-dry-run
|
|
387
|
-
```
|
|
388
|
-
|
|
389
|
-
The GitHub workflow `.github/workflows/platform-bundles.yml` builds platform
|
|
390
|
-
package artifacts on manual dispatch. Publish manually only after all platform
|
|
391
|
-
artifacts and the clean consumer release smoke pass.
|
|
392
|
-
|
|
393
|
-
### The Skill Bundle
|
|
394
|
-
|
|
395
|
-
The tracked skill bundle lives in `docs/curation-skill/`.
|
|
396
|
-
|
|
397
|
-
It encodes the curation methodology as executable instructions for an AI assistant. It is not the same thing as the CLI or TUI. It is one surface for producing Liner project folders.
|
|
398
|
-
|
|
399
|
-
The skill writes authoring artifacts. The CLI compiles them.
|
|
400
|
-
|
|
401
|
-
## How Liner Differs From Skills
|
|
402
|
-
|
|
403
|
-
This is an important distinction.
|
|
404
|
-
|
|
405
|
-
A **skill** is a set of instructions loaded by an AI assistant at runtime. It tells the assistant how to do a task.
|
|
406
|
-
|
|
407
|
-
Liner is a **toolchain and artifact format** for creating portable context bundles.
|
|
408
|
-
|
|
409
|
-
They overlap because Liner includes a skill, but they are not the same kind of thing.
|
|
410
|
-
|
|
411
|
-
| Question | Skill | Liner |
|
|
412
|
-
|---|---|---|
|
|
413
|
-
| What is it? | Runtime instructions for an AI assistant | A file format, CLI, TUI, methodology, and packaging workflow |
|
|
414
|
-
| Where does it live? | Inside a specific AI tool's skill system | On disk as YAML, Markdown, source files, and archives |
|
|
415
|
-
| What does it produce? | Usually task output in the current session | A durable mixtape project folder |
|
|
416
|
-
| Is it portable across AI tools? | Usually no, or only with adaptation | Yes, `MIXTAPE.md` and sources are plain files |
|
|
417
|
-
| Does it fetch/compile sources? | Not by itself | Yes, through the CLI |
|
|
418
|
-
| Does it preserve provenance? | Only if the skill is designed to | Yes, in `tape.yaml`, source files, and `MIXTAPE.md` |
|
|
419
|
-
| Can it be versioned in Git? | The skill can; outputs are often ad hoc | Yes, both recipes and mixtapes are plain files |
|
|
420
|
-
|
|
421
|
-
The relationship is:
|
|
422
|
-
|
|
423
|
-
- The Liner skill helps author a mixtape.
|
|
424
|
-
- The Liner CLI compiles the mixtape.
|
|
425
|
-
- The mixtape can then be used in any AI tool, with or without the skill.
|
|
426
|
-
|
|
427
|
-
So a skill is one way to make a mixtape. The mixtape is the portable artifact you keep.
|
|
428
|
-
|
|
429
|
-
## How Liner Differs From NotebookLM, Claude Projects, and Chat Uploads
|
|
430
|
-
|
|
431
|
-
Hosted AI tools let you upload documents into a workspace. That is useful, but the context is usually trapped inside that product.
|
|
432
|
-
|
|
433
|
-
Liner differs in four ways:
|
|
434
|
-
|
|
435
|
-
1. **Portable recipes.** `tape.yaml` can be shared, reviewed, and recompiled.
|
|
436
|
-
2. **Plain files.** Mixtapes are Markdown and YAML, not a database object inside a vendor product.
|
|
437
|
-
3. **Curator synthesis.** The curator's framing is a first-class artifact, not an afterthought.
|
|
438
|
-
4. **Repeatable builds.** Source fetching and compilation can be rerun locally.
|
|
439
|
-
|
|
440
|
-
Liner is less polished than a hosted product and asks more of the user. The trade-off is control, portability, and inspectability.
|
|
441
|
-
|
|
442
|
-
## Example Tape
|
|
443
|
-
|
|
444
|
-
```yaml
|
|
445
|
-
title: Mobile Design Foundations
|
|
446
|
-
description: Core touch and gesture references for native mobile UX.
|
|
447
|
-
version: 1
|
|
448
|
-
curator: cmdux-sh
|
|
449
|
-
mode: quick
|
|
450
|
-
jtbd: When I'm designing the core UI of a consumer iOS app, I want to follow Apple's interaction conventions while choosing where to deviate visually, so I can ship something that feels native without looking generic.
|
|
451
|
-
|
|
452
|
-
sources:
|
|
453
|
-
- type: web
|
|
454
|
-
url: https://www.nngroup.com/articles/touch-target-size/
|
|
455
|
-
note: Touch target minimums and the research behind the 44pt rule.
|
|
456
|
-
section: foundations
|
|
457
|
-
|
|
458
|
-
- type: web
|
|
459
|
-
url: https://developer.apple.com/design/human-interface-guidelines/gestures
|
|
460
|
-
note: Apple's canonical gesture reference.
|
|
461
|
-
section: foundations
|
|
462
|
-
|
|
463
|
-
- type: local_file
|
|
464
|
-
path: local-sources/touch-target-paper.pdf
|
|
465
|
-
citation: "Parhi et al., 'Target Size for One-Handed Thumb Use,' Mobile HCI 2006."
|
|
466
|
-
note: The canonical empirical study behind the 44pt minimum.
|
|
467
|
-
section: evidence
|
|
468
|
-
```
|
|
469
|
-
|
|
470
|
-
## Example End-to-End Flow
|
|
471
|
-
|
|
472
|
-
```sh
|
|
473
|
-
# Start a project.
|
|
474
|
-
liner init mobile-design-foundations
|
|
475
|
-
|
|
476
|
-
# Edit the recipe and synthesis.
|
|
477
|
-
$EDITOR mobile-design-foundations/mixtape/tape.yaml
|
|
478
|
-
$EDITOR mobile-design-foundations/mixtape/synthesis.md
|
|
479
|
-
|
|
480
|
-
# Enable JS rendering if needed.
|
|
481
|
-
liner setup-js
|
|
482
|
-
|
|
483
|
-
# Compile the mixtape.
|
|
484
|
-
liner compile mobile-design-foundations
|
|
485
|
-
|
|
486
|
-
# Use it in an AI conversation.
|
|
487
|
-
# Paste mixtape/MIXTAPE.md and selected files from mixtape/sources/.
|
|
488
|
-
|
|
489
|
-
# Share it.
|
|
490
|
-
liner share mobile-design-foundations
|
|
491
|
-
```
|
|
492
|
-
|
|
493
|
-
Or with the TUI:
|
|
494
|
-
|
|
495
|
-
```sh
|
|
496
|
-
npx linersh
|
|
497
|
-
```
|
|
498
|
-
|
|
499
|
-
## Design Principles
|
|
500
|
-
|
|
501
|
-
Liner is guided by a few product and architecture principles.
|
|
502
|
-
|
|
503
|
-
### Context Should Be Portable
|
|
504
|
-
|
|
505
|
-
The output should survive outside any one AI product.
|
|
506
|
-
|
|
507
|
-
### Curation Is Judgment
|
|
508
|
-
|
|
509
|
-
The value is not in collecting the most sources. The value is in choosing, framing, pruning, and explaining.
|
|
510
|
-
|
|
511
|
-
### Plain Text Wins
|
|
512
|
-
|
|
513
|
-
YAML and Markdown make the artifact easy to inspect, diff, edit, copy, and version.
|
|
514
|
-
|
|
515
|
-
### Local First
|
|
516
|
-
|
|
517
|
-
The core runs locally. There is no hosted compilation service, no account system, and no telemetry.
|
|
518
|
-
|
|
519
|
-
### AI Assistance Is Useful But Not Sovereign
|
|
520
|
-
|
|
521
|
-
AI can help discover, evaluate, and draft. The methodology still assumes human review because AI is biased toward popular sources, generic notes, and shallow consensus.
|
|
522
|
-
|
|
523
|
-
## Common Failure Modes
|
|
524
|
-
|
|
525
|
-
Bad mixtapes usually fall into a few patterns:
|
|
526
|
-
|
|
527
|
-
- **Bookmark dump**: links without judgment.
|
|
528
|
-
- **Greatest hits list**: famous resources the AI likely already knows.
|
|
529
|
-
- **Transcript dump**: too many videos, not enough primary/reference material.
|
|
530
|
-
- **Unfocused topic**: no concrete job-to-be-done.
|
|
531
|
-
- **Noteless sources**: no explanation of why each source belongs.
|
|
532
|
-
- **Single-author tribute**: too much of one person's worldview.
|
|
533
|
-
- **No disagreement**: contested domains presented as consensus.
|
|
534
|
-
- **Synthesis as recap**: a summary of sources rather than a curator's framing.
|
|
535
|
-
|
|
536
|
-
Liner's methodology exists to catch these before compile.
|
|
537
|
-
|
|
538
|
-
## Project Status
|
|
539
|
-
|
|
540
|
-
As of v1.0.0:
|
|
541
|
-
|
|
542
|
-
- The Python CLI is functional.
|
|
543
|
-
- The active Go TUI is functional. The old React/Ink TUI is decommissioned and archived under `ink/`. The empirical-test phase has been removed from the driven flow — compilation is now the completion milestone (*compiled = complete*). The hub is a single summary view (status box + always-visible phase checklist), import uses a file picker for `.mixtape` archives, and completed/partial compiles open the existing compile result instead of rerunning by default.
|
|
544
|
-
- Phase 1 framing now validates the evidence plan before source discovery. The TUI requires a capability brief and required source roles with why/evidence/minimum coverage before advancing.
|
|
545
|
-
- The npm distribution uses a main `linersh` package plus five optional platform packages (`darwin-arm64`, `darwin-x64`, `linux-arm64`, `linux-x64`, `win32-x64`).
|
|
546
|
-
- The release is installable via `npx linersh` on Mac, Linux, and Windows x64. `liner --version` reports the TUI version (and the bundled core version alongside it).
|
|
547
|
-
- JavaScript-rendered web support is available through `liner setup-js`; the TUI prompts for it during first-run onboarding and from compile warnings when Chromium is missing.
|
|
548
|
-
- `liner uninstall` exists for clean local reinstall tests.
|
|
549
|
-
- The curation skill exists, ships with the TUI package, and supports Claude or Codex as the local runner.
|
|
550
|
-
- The MCP server, hosted web builder, and public library are planned.
|
|
551
|
-
|
|
552
|
-
## Where To Read Next
|
|
553
|
-
|
|
554
|
-
- Root README: `README.md`
|
|
555
|
-
- Curation methodology: `docs/curation-skill/CURATION.md`
|
|
556
|
-
- Mixtape format: `docs/curation-skill/MIXTAPE-FORMAT.md`
|
|
557
|
-
- Skill bundle: `docs/curation-skill/SKILL.md`
|
|
558
|
-
- TUI docs: `packages/tui/README.md`
|
|
559
|
-
- Platform binary packaging: `packages/tui/PLATFORM-BUNDLES.md`
|
|
560
|
-
- Publish checklist: `packages/tui/PUBLISH-CHECKLIST.md`
|