Current
1.1.1
Interrupted corpus work now resumes from its last durable checkpoint. Approved Sources survive Assembly, focused improvements persist across restarts, and completed audits visibly record their resolution.
- Resumed interrupted corpus work from the last durable checkpointIf an agent run stops or a generated artifact fails validation, reopening the Project restores the correct review or build action. Liner no longer treats partial work as complete or sends the curator back to the beginning of the corpus workflow.
- Preserved approved Sources through AssemblyUser-provided Sources keep their accepted identity when the assembled corpus adds richer evaluation metadata, and pending Assembly is now the primary action when it is the real next step.
- Made focused corpus improvements durable and visibleImprove Corpus decisions survive restart, an applied improvement does not reopen the same recommendation, and the human-readable operating-fit audit now records
improvement_applied while retaining the original gap as history. - Kept transition and deletion flows focusedSource and Synthesis transitions show ordinary confirmation messages instead of internal result payloads. Recoverable Project deletion now keeps focus and Enter behavior on the exact confirmation step.
Version
1.1.0
The builder now pauses for clear Source and Synthesis approval before Compile. Project maintenance keeps the same preview, approval, and receipt trail for Source changes, Project moves, and recoverable deletion.
- Prepared the maintenance stack as the Liner 1.1.0 release candidatePython, npm, platform packages, Go binaries, installed version output, and public version fields now agree on
1.1.0. Release preparation fails closed if any candidate package version already exists on npm, and CI now compares the public maintenance command reference with the installed CLI so Project, Source, and adapter commands cannot silently drift. - Verified the installed maintenance authority end to endRelease smoke now builds and installs the local npm and platform tarballs into an isolated HOME, then exercises CLI guidance, versioned Snapshot/Change Set/Receipt flows, Source lifecycle operations, Project rename, managed pointers, optional agent adapters, guarded legacy migration, and incompatible-version refusal. A Go source audit prevents supported maintenance entry points from reintroducing direct canonical-file writes; older composition, contradiction-cleanup, and production-merge apply paths now fail closed with exact Core remediation. First-run assembly now uses a Core-created one-shot boundary and Core Source additions, so later corpus rebuilds cannot replace identity-bearing Sources.
- Moved Go TUI maintenance onto Liner CoreThe TUI now consumes versioned Project Snapshots, Change Sets, Failure Reports, and Change Receipts for Source and Project maintenance. Core-provided risk and file effects drive explicit confirmation, malformed or crashed Core responses fail closed, and the retired Source append/drop paths no longer write
tape.yaml directly. A Maintain project TUI command exposes immutable Source IDs and routes update, replace, remove, purge, rename, and move through that same contract. Confirmation now follows Core risk: additive and metadata plans continue after validation, while approval-required plans wait on the exact preview. - Kept curator approvals focused on the decision being madeUser-provided Source review now summarizes what will be added, what stays unchanged, and what happens next instead of exposing Core protocol payloads. After Sources are accepted, one stable transition leads to a separate Synthesis approval; confirming that approval records the receipt and starts Compile automatically.
- Added recoverable whole-Project deletionMaintain Project now includes a guarded Delete Project action that requires the exact Project name, previews the identity-preserving move through Core, and writes a receipt. Deleted Projects move outside the active Project library into a recoverable Liner Trash location, so they disappear from the Project list without erasing files.
- Accepted Markdown-linked evaluation candidatesEvaluation validation now recognizes candidate titles whose URLs are written as Markdown links, avoiding a false
no candidates list failure after Candidate discovery produced valid linked entries. - Bundled opt-in Maintenance AdaptersLiner now ships a thin CLI-delegating maintenance skill for Codex and Claude, with explicit inspect/install/update/remove commands, durable receipts, fail-closed managed content checks, and canonical Change Sets for optional Project pointer blocks.
- Published CLI-owned Project maintenance guidance
liner project guidance now emits equivalent versioned JSON or Markdown, classifies Project Skill routing state, keeps skill Sources explicitly inert, and upgrades legacy root or declared Project Skill routing only through a reviewed Change Set, folding in lazy immutable-identity migration when required. - Sharpened generated Project SkillsRoot
SKILL.md now acts as a concise project entrypoint with trigger-oriented description text, explicit load order, and checkable completion criteria while leaving detailed operating rules in LINER.md. - Recovered more browser-renderable source blocksVercel Security Checkpoint responses now route through the existing JS-render fallback instead of surfacing as generic
HTTP 429 fetch failures when Playwright can recover the article. - Kept source repair refreshes scopedWhen recovered custom source content needs reconsideration, Compile now refreshes source evaluation from Evaluation onward instead of resetting the corpus build to Candidate discovery.
- Separated source notes from warningsAccepted sources with notes remain visible in Compile summaries, but they no longer label an otherwise usable compile as
compiled with warnings or prompt repair when there is nothing to fix. - Simplified JS rendering setupFirst-run JS rendering setup and Compile's Playwright Chromium install state now use one clear explanation, one
i install action, and an indeterminate loader only while setup is actually running. The UI no longer shows a fake progress bar or duplicate repair/retry instructions before the browser has been installed, and it clears the retrying note once the automatic recompile finishes.
Version
1.0.2
Compile became easier to trust when sources are missing or blocked. The terminal app now summarizes the result first, keeps source review close by, and guides recovery for custom web and YouTube sources.
- Refined Compile Console source repairCompile now opens with a compact result summary and sends users to
View sources for the navigable source table. Sources with errors, retryable custom sources, and recovered content needing Build Corpus are bubbled to the top with clearer research source and custom source labels. - Made custom source recovery explicitRepair retries unavailable custom YouTube/web sources, installs JS rendering first when needed, stops on a recovery review, and asks for a corpus rebuild only when content was actually recovered.
- Kept replacement-source repair in contextAdding sources from Compile now returns to Compile instead of restarting Clarify Goal, and recovered/custom local sources are preserved as active source material for the next corpus build.
- Allowed usable partial compiles to continue after reviewReviewed source warnings stay visible, but a usable
MIXTAPE.md can proceed to Operating Layer creation instead of being blocked by stale compile-error state. - Aligned Project Complete with its primary action
Next now opens LINER.md when the project is complete, so Enter no longer lands on a no-op management state.
Version
1.0.0
The first complete project-builder release. The Go terminal UI is now the default path, the npm package includes the CLI and TUI, and completed folders carry instructions future AI sessions can use.
- Ships the Go TUI as the default Liner interfaceRunning
liner or npx linersh opens the Charm-based Go TUI for creating, opening, and managing local Liner Projects. - Installs through one npm command
npx linersh or npm install -g linersh installs the terminal app and the matching local binaries for the user's platform, so normal use does not require a Python setup. - Creates the Operating Layer for completed projectsAfter the corpus is ready, Liner writes
LINER.md, root SKILL.md, and liner.yaml so future AI sessions know how to use the project, what evidence to trust, and where the boundaries are. - Tightens corpus-to-method generationOperating Layer output now promotes corpus synthesis, quality checks, source roles, and capability patterns into executable project behavior instead of leaving generic source-use rules.
- Keeps clean installs testableThe installed package can be checked from a temporary home directory and project folder, which makes it easier to prove a fresh
npx linersh run opens the same Go TUI a regular user receives.
Version
0.5.7
A focused PDF recovery fix for web sources that only expose the file through a browser download.
- Capture PDF downloads during JS fallbackWhen a
.pdf web source first returns a JavaScript or bot-detection stub, Liner falls back to Playwright. If Chromium treats that PDF as a download, Liner now captures the downloaded file and runs the same shared PDF text extraction path instead of marking the source failed with Page.goto: Download is starting.
Version
0.5.6
Source fetching became stricter about PDFs, JavaScript shells, cookie banners, stale cache entries, and partial compile reporting.
- Extract remote PDFs as PDFsWeb sources that return
application/pdf, start with %PDF-, or use a .pdf URL path now run through the shared pdfplumber extraction path instead of being treated as HTML. This prevents raw PDF bytes from being written into sources/ and MIXTAPE.md. - Reject stale bad cache entriesCached web content is now purged and refetched when it looks like raw PDF bytes, a PDF URL saved by the old HTML fallback, a tiny soft/playwright fallback, or a cookie-consent-only body.
- Detect empty JavaScript app shellsServer-rendered HTML that looks like a client-side shell with no useful readable body now triggers the existing Playwright fallback instead of becoming a misleading successful source.
- Reject cookie-consent-only sourcesLiner now treats short cookie-banner output as unusable, including after Playwright rendering. The source is marked unavailable with a clear message instead of feeding consent text into the mixtape.
- Clarify partial compile outputThe CLI now reports usable source count versus unavailable placeholder files when a compile is partial, e.g.
22/24 usable sources, 2 unavailable placeholders. - Shared PDF extraction helperLocal and remote PDF handling now use one extraction helper so future PDF fixes land in both paths.
Version
0.5.5
A broad reliability pass for terminal scrolling, JavaScript-rendered pages, partial compiles, and clean reinstall testing.
- Ships the web extraction fixes to clean npm installsFresh
npx linersh runs on macOS, Linux, and Windows x64 receive the source fetching improvements below. - Fixed done-screen scrollingThe final response now has an internal scroll viewport in the terminal alternate screen. In the default done view, use ↑/↓ or pgup/pgdn to scroll the green final-response box; inspect mode still uses those keys for tool-call navigation and keeps the final response compact so the detail panel remains visible.
- Surfaced missing JS-rendering setup during compileIf a compile hits JavaScript-only pages and Playwright Chromium is missing, the TUI now shows a dedicated JS-rendering callout with a
j action that runs liner setup-js --yes, notes the ~150MB Chromium download, and retries the compile. - Fixed compile-result source scrollingCompleted compile screens now keep the source list in an internal viewport with ↑/↓ and pgup/pgdn controls, so long source lists remain readable in the alternate screen.
- Clarified the ready-to-compile milestoneAfter Assembly, the hub now says the methodology is complete and the final mix is assembled, instead of only showing Compile as the next step.
- Treat partial compiles as compiledIf compile writes
MIXTAPE.md with some missing sources, the hub now lands in a finished "compiled with warnings" state instead of asking the user to compile again. - Open existing compile results without rerunningWhen
MIXTAPE.md is current, pressing Enter on the completed Compile row opens the final compile result screen reconstructed from disk. Recompile is now explicit with r from that screen. - Hardened web extraction fallbackIf the primary HTML extractor crashes on a page, Liner now falls back to tag-stripped HTML text and keeps the source with a soft warning instead of failing it with a Python exception.
- Added first-run JS-rendering onboardingFresh installs now get an optional setup screen explaining Playwright/Chromium support right after the agent/model setup flow, with install and skip paths.
- Added
liner uninstallThe installed command can now remove local Liner state, Playwright's Chromium cache, and npm's _npx execution cache for clean reinstall testing.
Version
0.5.4
Fresh npx linersh installs became easier to verify, and Windows x64 support moved closer to the same install path as macOS and Linux.
- Fixed npm skill-bundle resolutionThe TUI now probes the installed package root more directly, tolerates
LINER_SKILL_PATH pointing either at the skill directory or at SKILL.md, and shows the checked paths when the bundle still cannot be found. This fixes the Phase 2 "Couldn't find the curating-mixtapes skill bundle" failure seen after npx linersh. - Prepared Windows x64 installsWindows support was added alongside the existing macOS and Linux install paths so Windows users can receive the bundled CLI binary through npm.
- Marketing landing page polishThe Astro marketing site has a refreshed hero, copyable
npx linersh install CTA, version-consistent 0.5.3 labeling, Liner logo treatment, WebGL resize fix, continuous marquees, and tightened mobile behavior. - Per-phase model selectionThe two heaviest phases — candidate discovery and evaluation, ~65% of a cycle's tokens — now run on a cheaper model by default (Sonnet for Claude,
gpt-5-mini for Codex). Framing, quality, synthesis, and assembly stay on the agent's default model, where curator taste matters most. Cuts a cycle's quota roughly 5×. Override per agent + phase in ~/.liner/config.yaml under models: — e.g. set candidates: opus to undo the downgrade. On a subscription the saving is rate-limit quota, not money. Claude phases use the sonnet alias, which auto-tracks the latest Sonnet, so model version bumps don't need a release. - Model-rejection fallbackIf the agent rejects the configured model for a phase (renamed, retired, or mistyped), the run warns the curator with the exact fix — set/remove
models.<agent>.<phase> in ~/.liner/config.yaml — and retries once on the agent's default model, so a stale model id degrades to "ran on the default" instead of a hard failure. - Agent-unavailability watchdogA launched-but-mute agent (signed out, expired subscription, deprecated model) used to hang the run spinner indefinitely. The runner now declares the agent unreachable if it emits no output within 15s, surfaces a clear "no response from <agent> — check auth/subscription" message, and lands the run in the failed state where retry / switch-agent already live.
- Removed the invented
$ costfrom the process-manifest screen — the PhaseRunner's was already dropped in 0.5.2. Subscription-driven runs aren't metered API billing, so the dollar figure was fictional; token counts stay.
Version
0.5.3
Version reporting became clearer: the command now shows the installed TUI version and the command-line core version together.
liner --version now reports the TUI/npm versionnot just the bundled Python core. It used to forward straight to the core and print e.g. liner 0.5.0 regardless of which package you installed. Now prints liner <tui> (tui) · <core> (core) (and just the TUI version when the core isn't resolvable).- Single source of truth for the versionThe header chip and the boot splash now read the version from
package.json at runtime instead of separately edited string constants.
Version
0.5.2
The terminal hub became more direct: one status view, clearer navigation, and fewer misleading run summaries.
- Removed the empirical-test phase from the TUICompiling is now the completion milestone — *compiled = complete*. There's no longer a trailing optional phase the hub parks you on. (The with-vs-without validation lives on as methodology guidance, not a driven phase.)
- Hub redesigned into a single summary viewa status box (Ready to use / In progress / Not started) plus an always-visible phase checklist. Replaces the old focus-card / list dual mode.
- Import auto-detects
.mixtape filesin the current folder, offers a re-scan, drops the opaque "archive" label, and lands you on the imported mixtape's hub rather than a phase prompt. - Consistent quit key
q quits from any screen; esc goes back. - One call-to-action per screena single "next · …" description line above a uniform key-hint navbar.
- Removed the misleading dollar-cost figurefrom run summaries — subscription-driven runs aren't metered API billing. Token counts stay.
- Reduced scrollback ladderingthe run's final-response panel caps to the terminal height (on top of the alternate-screen buffer added in 0.5.1).
- Fixed the mixtape browser laddering + garbled selected rowThe project list now renders into a terminal-sized scrolling viewport (windowed around the selection, with above/below indicators) and each row is a single truncating line. Previously, on a small terminal the list rendered taller and wider than the window — so arrow-key navigation reprinted the header on every keystroke and the selected row's highlight bled across wrapped lines. The header subtitle also no longer wraps.
- Fixed a hard API-400 crash on long agent runsA multi-turn methodology phase (and any resume of a failed run) could die with
400 … thinking blocks in the latest assistant message cannot be modified once Claude Code auto-compacted a conversation that had interleaved thinking on. The spawned agent now runs with extended thinking disabled (MAX_THINKING_TOKENS=0), so the failure class can't occur. - Isolated the methodology agentThe spawned Claude now runs with
--strict-mcp-config, so it no longer inherits the user's global MCP servers and connectors — less context bloat, narrower reach, no irrelevant tools.
Version
0.5.1
The first polish pass after the npm TUI release improved startup reliability, terminal color, navigation, and folder opening.
- Fixedthe
curating-mixtapes skill bundle now ships inside the npm package, so AI-assisted JTBD clarification works for npm installs (it was silently falling back to canned questions in 0.5.0). - New color palette: red-orange primary, green for success/progress, goldenrod for the running state, purple headings, hot-pink errors.
- Legibility: replaced Ink's terminal-relative dim with an explicit grey, and named-"black" text on colored fills with true black (
#000000). - Fixed an ESC navigation loop; ESC now always walks back to the splash.
- Terminal alternate-screen buffer + a clear on run completion to cut scrollback artifacts.
- Contextual notes below boxes (curator note, share result) are pink; the share result is a persistent note instead of a vanishing toast.
- New
o command opens the mixtape folder in the OS file manager. - Cassette splash logo cleaned up and rendered in the brand color.
Version
0.5.0first public release
The interactive terminal UI became available through npm for clean machines.
npx linersh now opens the TUI on clean machines.- Running
liner with no arguments opens the TUI after a global install. - CLI subcommands such as
setup-js, compile, share, and status continue to work from the installed command. - The install docs now describe the bundled CLI and
liner setup-js path for JavaScript-rendered sources.