Clio Coder 0.4.7
This release brings a unified Library for reusable workflows, operator extensions, safer keyboard and draft handling, and a compact welcome header. Native workers retain configured output limits and interrupted reasoning, and the guides describe the shipped behavior and its verification limits.
Added
- Add optional operator extension runtimes with declared namespaced slash commands, bounded session/turn observations, additive footer status, host-rendered panels and an explicit headless
extensions runpath. Verified private package copies run in disposable Node processes with readiness, cancellation, scope/digest revocation and idle reload; existing tools, hooks and frozen model schemas retain their admission contracts. - Ship local experiment-status and measurement-summary extension examples with explicitly synthetic demonstration evidence, narrow author types, real process lifecycle contracts and installed-package verification.
- Add
context(scope="library"), a read-only projection of the shared recipe inventory with boundedkind,queryandrefselection andlimit/offsetpages. Rows are tagged: a loaded resource carries its actual runtime name, owning package or source class, scope, origin evidence and working invocation; a catalog hint names its installable owner and that member's honest state and is never invocable; a package row is the install target with its installed copies and boundedprovideshints. The model audience hides internal and shadow agents, untrusted and unavailable resources, instruction bodies and recipe paths; a native worker registry gets a clear unavailable read instead of the global library. The scope activates, installs, registers and pins nothing, reserves its observation budget before any discovery, and fits each page to the remaining budget rather than returning a stub (tests/contracts/library-context.test.ts). - Unify installable plugins, skills, agents, prompts and fleets as library packages with one manifest, exact version, full-tree pin, structured origin and scoped lifecycle. Add registration, a five-kind Library overlay and named package eval suites; Materio declares an offline Python contract suite.
- Discover the big five coding agents' user and project resources with inventory-derived counts, restore
/interop, and add approved data-only library adoption with foreign origin, trust, digest rechecks, duplicate detection, and WTF-P Claude portable bundle support. - Prompt templates can declare
display-only: truein their frontmatter. Submitting such a command renders the template body locally as an operator card in the transcript, headed by the command name and its source package, and sends nothing to the model: no turn, no session entry, no tokens. The card shows the first fenced block when there is one, wraps to the terminal width without truncation, and headlessclio-coder runprints it to stdout and exits 0 before boot. Autocomplete and/library promptsmark these templatesreference(tests/contracts/prompt-display-only.test.ts). - Prompt templates from user, project, and installed plugin roots now appear in the composer's slash autocomplete as namespaced commands such as
/materio:helpand/wtfp:new-paper, with their description andargument-hint, listed after the built-in commands so no template can shadow one. The list is read live, so/library reloador a new installation shows up without restarting (tests/contracts/slash-autocomplete.test.ts). - Add a distinct agent plugin engine using the portable Agent Plugins 1.0.0 manifest, explicit component references, native Clio resource projections, isolated install state, full-tree integrity, staged replacement and recovery of changed files.
- Add plugin catalog listing, installation previews, pinned local and GitHub bundle installation, updates, removal, enable/disable, drift inspection and pin verification through the CLI and terminal library.
- Ship the Materio (
materio) materials research plugin with researcher interviews, supplied-paper literature review, lab feasibility, task planning, execution and verification artifacts, archive checkpoints, conservative scientific checks, and a text handoff into WTF-P's public actions. Include peer package export for Codex, Claude Code and Gemini. - Add harness extensions for contained Node.js and Python command tools with JSON contracts, mediated execution, collision protection, provenance and lifecycle revocation.
Changed
- Replace the welcome panel with a compact three-row header that shows the configured route and the next useful action. Keep early input available during startup, read project-context state outside rendering, and use a live collapsed header when resuming, forking or handing off a session.
- Refresh the guides and visual references for the shipped Library, extensions, keyboard controls, welcome header, context retention and layered worker output settings.
- Adopt a smaller keyboard map with a persistent contextual Ctrl+G menu, Ctrl+Q follow-up, Alt+Q recovery, Ctrl+R fullscreen search and restored Alt+B/D and Home/End editing. Preserve explicit overrides and make [] disabling and live reload effective. Isolate release/repeat, search, review and permission input; keep pasted commands literal and newer drafts safe through asynchronous sends and external editing. Add /background, /interrupt, /editor and /notifications dismiss command bridges. Bundle the pinned Pi compatibility patch for ordinary npm consumers.
- Rebuild the Library as one coherent operator browser over the shared recipe inventory. Five categories (Skills, Agents, Prompts, Fleets, Plugins), a Browse or Installed mode and a selected user or project scope stay on a visible status row at every width, including on an empty category. Browse lists install targets and finds a bundle through its catalog hints; Installed lists the recipes the loaders actually see plus any copy that failed to provide one. Origin (Bundled with Clio-Coder, Remote, Local, Imported from
<agent>, Core), vendor format, trust, scope, integrity and availability are separate columns rather than one opaque code. A package opens its members instead of routing back to its own tab, and a member's install or removal identifies its whole owner in the selected scope. Core and loose recipes carry no package lifecycle and say why; an unavailable recipe offers no use action. Capped inventory results are reported as incomplete rather than drawn as an absent package. Every managed change goes through a reviewed plan that states the operation, scope, identity, dependencies, reverse dependencies, resulting fallback and recovery; cancelling releases the staged source and writes nothing, and the outcome reports committed, failed and unattempted work with disk state, resource admission and session refresh as separate facts. Retrying the refresh never repeats a write (tests/contracts/library-browser.test.ts). /librarygains reviewedinspect,install,removeandimportforms that open the same browser on the named reference or source; nothing is written before that review./library import <path-or-url>reviews the exact source given, with its projected resources, unsupported host features and omitted files, while the Library'sokey remains the separate local-agent discovery route. The separate/agentsand/promptslist overlays are removed now that the Library covers both.- Reorganize shareable packages into canonical
library/kind directories (library/skills/,library/plugins/) with a single source entry point, preserving five package kinds, the portable package engine, and the bundled npm index while keeping built-in core agent recipes and baseline fleets product-owned. - Use
clio-coder libraryand/libraryfor package management; remove top-levelplugins, top-levelskillsand/resources. Keep/skillactivation and move experimental skill scenarios toclio-coder eval skill. Recognized model shell package mutations remain operator-only. - Preserve committed interview answers when a draft edit is discarded, keep oversized option details scrollable, retain compact template presentation when queued, and display complete install paths, digests and fleet arguments during approval.
- Redraw the
ask_userinterview as one box above the composer that sizes itself to the round: the question renders first with bold spans and hanging numbered lists, every option shows its whole description, the round strip names every question, earlier answers fold to one row (aopens them), and the tier, effect, and reversibility copy sits behind?. An option whose label says the operator will type ("Provided details", "I'll describe", "Other") opens a multi-line answer field on Enter instead of recording the bare label. Nothing in the box is ellipsized; a question longer than the box scrolls with PgUp/PgDn while its options stay on screen (tests/contracts/ask-user-layout.test.tsat 80, 120, and 160 columns). - Fold the permission card's standing approval terms (approval, consequence, reversibility, deny, stop, hard-block) behind
?, so the card leads with the call: tool and action, the target folded in full under its label instead of ellipsized, the mutation size and digest, and who asked, followed by one row that says what allow, deny, and stop do (tests/contracts/permission-card-layout.test.ts). - Paint a submitted prompt template as the line the operator typed, with a dim note naming the template and its length, instead of the expanded body; the model still receives the body unchanged (
tests/contracts/prompt-template-turn.test.ts). - Record each answered
ask_userround in the transcript as the question headers and the answers, so the interview reads back after the overlay closes instead of leaving▸ tool action {"action":"ask",…rows alone (tests/contracts/interview-record.test.ts). - Mark a settled worker whose answer starts
needs_input:,task_blocked, or## CHECKPOINT REACHEDasneeds inputon its folded transcript row and keep its questions on that row (up to 16) whatever the transcript preset folds of an ordinary answer (tests/contracts/worker-checkpoint.test.ts). - Collapse the harness extension manifest to one shape:
id,name,version,description, optionalcapabilities.tools[]andcompatibility.clio. There is no version discriminator. A manifest declaringresources,prompts,skills,agents,fleetsorthemesis refused with a diagnostic namingclio-coder library install. A package whose only contribution is a roothooks.yamlstays valid. - Resolve contained package paths and explicit component references consistently in prompts, skills and agent recipes. Reload plugin resources independently from harness tool schemas.
- Allow declared arguments on registered fleet code steps and retain them in previews, plans and execution.
- Protect installed plugin and harness-extension trees and lifecycle commands as operator-owned resources. Include complete plugin pins in lint and shipped package verification.
Fixed
- Allow the hosted Ubuntu release gate 15 minutes, matching the tag-release workflow, so the expanded contract, smoke and package checks can finish before the job deadline.
- Preserve trusted project and local output-token settings in native workers, with safe fallback when workspace settings are untrusted or changed. Retain private reasoning-only length responses for bounded same-model continuation without moving private reasoning into visible message content.
- Record native Materio verification limits explicitly: synthetic examples, offline contracts and advisory reviews do not establish completion of the full scientific writing pipeline.
- Keep trusted Library skills visible when an untrusted compatibility copy has the same name, and explain trust or manual-activation restrictions on named skill loads.
- Align plugin and harness guides with the canonical Library and
/extensionsroutes, and verify independent recipe/runtime lifecycles with bundled Materio, scientific extensions and foreign imports. - Finish the Clio Coder filesystem namespace cleanup: generated scratch paths and temporary directories use
clio-coder, trace examples and fleet documentation use canonical paths and branch names, and lint guards against stale project-state paths. - Verify every bundled library package and subagent skill binding from the installed npm package, document the in-repository marketplace sources, and correct agent-list help to name plugin recipes.
- Handle
/skill offbefore skill expansion on direct interactive chat admission, so it clears the active tool surface without looking up or installing a skill namedoff.
Removed
- Remove extension-owned prompt, skill, agent, fleet and theme roots. Library packages are the only source of packaged resources, and
/library reloadis the only resource reload path. Extensions keep command tools,hooks.yaml, install integrity, enable/disable, compatibility ranges and worker attestation. - Remove the
2026-09-01-extension-install-digestslifecycle migration and theclio-coder upgradeblessing of pre-digest extension install records. An install record without a content digest now fails closed with reinstall guidance.