Skip to content

Plif 0.3.0

Choose a tag to compare

@AnThophicous AnThophicous released this 14 Aug 00:59
· 138 commits to main since this release

Changelog

All notable changes to plif. This project follows Semantic Versioning.

0.3.0 — 2026-08-13

Added

  • Anthropic provider. Claude runs through the official @anthropic-ai/sdk
    rather than an OpenAI-compatible shim, with streaming, tool use and verbatim
    thinking replay. The adapter is chosen from the endpoint, so nothing else in
    the harness needs to know which provider is in play.
  • Eleven more providers. Anthropic, Google Gemini, xAI, Mistral, Cerebras,
    Fireworks, Z.AI, Moonshot (Kimi), Perplexity, Hyperbolic and SambaNova join
    the built-in list; OpenAI is labelled ChatGPT so it can be found by the name
    people use for it.
  • Live model discovery. /model asks each provider what it actually serves
    instead of showing a list frozen at release time, ranked so the models people
    reach for come first. Providers with no credential are skipped instantly, and
    the answer is cached for the process.
  • Paged provider lists. A provider with more than ten models shows its top
    ten and a "show N more" row, so one crowded gateway cannot push every other
    provider off the screen.
  • PowerShell installer. The GitHub installer now has a compact ASCII
    banner, clear preflight checks, safer failure messages, uninstall support and
    a welcoming post-install guide.

Changed

  • plif ships with no model. There is no default provider and no default
    model; the first run opens the picker instead of quietly pointing the agent
    at an endpoint nobody chose.
  • The model picker separates yours from ours. Providers declared in your own
    config appear first, under their own heading, above the ones plif ships.
  • The credential popup names the provider and the environment variable it would
    accept instead, and entering a key immediately re-runs discovery for that
    provider.

Fixed

  • Picking a model discovered from a live endpoint works. It previously did
    nothing at all — the selection was validated against the hardcoded catalogue,
    so any id the endpoint had added since release was silently unselectable.

Earlier 0.3.0 release notes — 2026-08-12

Official release for the new conversation harness, navigable Ink interface, MCP reliability work, NVIDIA NIM support, and Markdown-native skills.

Added

  • Canonical conversation history. Versioned session events now preserve user messages, assistant commentary/final responses, tool calls and results, approvals, questions, compaction, failures, and interrupted turns without flattening provider roles.
  • Navigable transcript. Ctrl+T opens the complete transcript; arrows, Page Up/Page Down, Home/End, and Esc provide line, page, boundary, and close navigation while native terminal scrollback remains available.
  • DME skill package and discovery tools. Skills can be grouped, inspected, loaded on demand, and routed proactively without flooding the conversation. The DME package ships with focused design capabilities while flat legacy skills remain compatible.
  • Work dock and Plif focus frame. Background tasks and subagents share a compact surface, with responsive context/workspace information attached to the existing Ink composer identity.
  • Durable memory ranking. Reusable facts are ranked by confirmation, contradiction, recency, and prompt budget instead of being selected only by arrival order.
  • NVIDIA NIM provider. The model picker includes curated NVIDIA models and can expand the NVIDIA account catalogue when a stored credential is available.
  • Markdown-native builtin skills. Context ingestion, slide decks, deep engineering audits, Galileu, and Office rendering are loaded from the agenting skill tree.

Changed

  • The normal TUI is content-sized instead of reserving the entire terminal. The compact session header remains visible, while only the transcript and extension browser use full-screen layouts.
  • Model text and reasoning update the timeline directly from SSE deltas; the active answer is also visible in the Ctrl+T transcript before it is persisted.
  • Completion tokens are estimated independently of SSE chunk boundaries and reconciled with cumulative provider usage. Slash and shell commands no longer increment agent turns or start the agent timer.
  • Routine tool activity is compacted, while diffs, failures, approvals, and questions retain dedicated rows. Running state, spacing, narrow-terminal collapse order, and Windows resize handling were simplified.
  • Prompt compilation now gives MCP and skills clearer discovery, fallback, and error-isolation instructions.

Fixed

  • Resumed sessions reconstruct protocol-correct assistant tool calls and tool results instead of fabricating assistant prose.
  • Truncated or mixed legacy JSONL sessions recover prior valid events and mark unfinished work as interrupted rather than leaving a permanent running row.
  • MCP connection and tool failures remain bounded to the affected server/tool instead of destabilizing the whole harness.
  • OpenAI-compatible streaming handles interrupted/idle SSE responses, visible retry/reset behavior, reasoning-field variants, and reasoning-effort capability fallback more consistently.
  • The opening header is no longer pushed out of view by a terminal-height dynamic frame, and Plif Thinking is no longer duplicated inside the input.

Install

npm install -g @plif/cli@latest

0.2.0 — 2026-08-09

plif 0.1.0 to 0.2.0

91 files across packages/, +5 805 / -1 454, 490 tests passing.

Added

  • Modular prompt compiler. The single instruction blob became packages/core/src/harness/prompts/: a compiler plus per-mode instructions for the primary agent, subagents, explore, review and compaction, with separate modules for environment, project, tools, skills and MCP context.
  • curl tool. HTTP requests without going through the shell — methods, query parameters, headers, JSON or text bodies, manual redirect handling with a fresh host approval per hop, and a byte ceiling on the response. Credentials are stripped when a redirect crosses origins, and secret headers are never echoed back.
  • update_plan tool. A short execution plan for genuinely multi-step work, rendered as a live checklist rather than repeated in prose.
  • get_config and update_config. The agent can read its own configuration with credentials redacted, and change the active model, vision model, theme, auto-approve, or add an OpenAI-compatible provider — behind a confirmation panel unless Auto Approve is on.
  • Vision tools. inspect_image and list_vision_models delegate an image to a vision-capable model without changing the main model.
  • create_skill, and three built-in skills. Skills can now be written from inside a session and loaded without a restart. Ships with skill-creator, anti-ai-slop and dme-eclipse-design.
  • User themes. Theme documents in ~/.plif/*.theme with a published JSON schema at packages/cli/schema/theme.schema.json.
  • Discovery panel. Batched reads and directory listings collapse into one row instead of flooding the timeline.
  • Shell highlighting for commands in the timeline, and a terminal title that tracks the session.
  • More language servers. Shell (shellcheck) and PowerShell Editor Services, with resolution that survives npm .cmd shims.

Fixed

  • Typing is no longer mistaken for a paste. Ink hands over whatever stdin.read() had buffered, so an auto-repeated space or two keystrokes landing in the same frame arrived as one chunk — and any chunk longer than one grapheme was being turned into a [Pasted Content] attachment mid-sentence. plif now enables bracketed paste and reads the terminal's own markers; the fallback for terminals that ignore it requires more than one line of content.
  • Each turn keeps its own paragraph. Assistant text from consecutive turns was concatenated with no separator, so the last word of one turn ran into the first word of the next in the recorded session and on resume.
  • Resizing the window no longer duplicates the session. Ink handles SIGWINCH before React can render at the new size, and its intermediate frame can be taller than the restored window — which triggers clearTerminal plus a full static replay, and on Windows that puts a second copy of the whole session on screen. plif owns resize itself and now detaches only the listener Ink registered, leaving application listeners alone.

Security

  • get_config redacts by location, not by key name. The previous denylist matched apiKey, token, secret and password, which misses the two places a credential actually lives: an HTTP MCP server keeps its bearer token in headers.Authorization, and a stdio server keeps it in env under whatever the vendor named the variable. Both were returned verbatim to the model and therefore to the model's endpoint. Everything inside headers and env is now redacted wherever it appears, while the model keeps what it needs to manage configuration.

Changed

  • The startup mark is redrawn.
  • @plif/cli, @plif/core and @plif/sandbox are published as compiled output only. Source stays in this repository.

0.1.0

First release.