Repository navigation
v0.234.0
This release lets an agent build a design mockup and hand you a browser link to it, adds collection-level controls to knowledge, and fixes a memory regression from v0.232.0.
Design mockups you can open in a browser
open_artifactnow works for rendered artifacts (HTML, React, Markdown, Mermaid, SVG and Vega-Lite), not just saved files. It gives you a short-lived, signed link that opens the artifact as its own page in a browser tab, themed from?theme=light|darkor your OS setting. The page keeps the artifact's sandbox and never calls the agent's API. Links last 30 minutes.- A new
design-mockupsskill teaches the agent to build a reviewable screen preview: real data, design-system components only, a toolbar to switch theme, desktop/phone width and every UI state, and a layout check that fails the render if anything spills past 1440 or 390 px.
Knowledge by collection
- New API routes list knowledge by collection (
GET /api/knowledge/collections), scope search to one collection (?collection=), and delete or restore a whole collection within the existing 24-hour grace window. The console view for this comes in a later release.
Memory and standing instructions
- Asking "what did I do today, from the log" reaches your memories again (#4918). v0.232.0's tool rename had dropped that wording from
memory_list, so the agent answered from activity totals instead. - Withdrawing a standing instruction from the console or the API now leaves a "You withdrew: …" note in the chat, recorded as your own message. Compaction therefore keeps the withdrawal next to the original approval (#4861).
For plugin authors and operators
protoagent plugin check <dir> [--json]statically lints a plugin: event names against the manifest, unserved public paths, view publish topics, tools without a skill, and known registration mistakes (#4809).- Per-role generation profiles, foundation slices (ADR 0128). You can define named profiles under
model.profilesin config, andsubagents.<name>can now set a model, profile, tools and turn limits for any built-in or plugin subagent. No profiles ship by default, so behaviour is unchanged until you add one. Subagent usage now records the finish reason, visible-text length, tool use and reasoning tokens, plus anllm_empty_completions_totalmetric. - The nightly memory evals match the memory policy: a status note ("standup just ended") is expected NOT to become a memory, and a durable fact still is (#4919). New on-demand memory-retrieval eval tooling is included (#4897); it is not part of the nightly gate.
- The desktop "Install Command-Line Tool" dialog uses plain wording (#4903).
Upgrading
- No config changes are required. If you define generation profiles, the key is
model.profilesin your config file. open_artifactlinks for rendered artifacts are new public routes under/plugins/artifact/media/…. They are protected by a signed ticket and expire after 30 minutes.
What's Changed
- docs(design): approved spec for the directive-ledger console view (#4861) by @mabry1985 in #4896
- docs(adr): 0128 generation profiles: per-role output, reasoning and context budgets (#4875) by @mabry1985 in #4899
- feat: Directive ledger (2-pre, console): move formatTimestamp from app/tasks.ts to lib/format.ts and add the "7 Nov at 17:14" older-date form (#4861) by @mabry1985 in #4901
- feat: Directive ledger (1/2, server): an operator withdraw via DELETE …/directives/{id} appends an operator-originated "You withdrew: …" note to the chat transcript, so compaction carries it next to the original approval (#4861) by @mabry1985 in #4900
- docs(memory): search_scoped docstring in graph/projection.py names memory_search, not the removed memory_recall (#4630 close-out) by @mabry1985 in #4904
- feat: Memory eval (1/3): PersonalizationV4 fixture builder — extract PV4 chats into frozen memory stores by @mabry1985 in #4902
- fix(desktop): Install Command-Line Tool dialog reads as plain copy by @mabry1985 in #4903
- feat: Directive ledger (2a/2c, console data): useDirectives(sessionId) hook + list/revoke API helpers + uiStore openDirectives request; refreshes on directive.changed and reconnect, no polling; nothing rendered yet (#4861) by @mabry1985 in #4905
- feat: ADR 0128 S0 (measure): subagent usage rows gain finish_reason / text_chars / has_tool_calls / reasoning_tokens; llm_empty_completions_total counter; host-free scripts/measure_output_budget.py (#4875) by @mabry1985 in #4907
- feat: Directive ledger (2b/2c, console components): DirectiveStrip, DirectiveDrawer and DirectiveEntry with every spec state and the inline withdraw confirm; built, unit-tested, not yet mounted (#4861) by @mabry1985 in #4913
- feat: ADR 0128 S1a (config): model.profiles → LangGraphConfig.model_profiles: dict[str, GenerationProfile], validated, settings-schema field, commented example; config_roundtrip golden gains "model_profiles": {} (#4875) by @mabry1985 in #4908
- feat: Plugins:
protoagent plugin check <dir>static lint. It checks manifest emits/subscribes against the code, unserved public_paths, page publish topics, skills present, and the known register footguns (#4809 part 1) by @mabry1985 in #4910 - feat: Memory eval (2/3): on-demand memory retrieval runner with mixed scoring + 20 changed-fact cases by @mabry1985 in #4911
- feat: Knowledge (ADR 0125 slice 6, server): GET /api/knowledge/collections lists collections with chunk counts, and /api/knowledge/search takes ?collection= (#4630) by @mabry1985 in #4906
- docs(design): approved spec for the Knowledge browser by collection (#4630 slice 6) by @mabry1985 in #4915
- docs(design): draft spec for the Decision needed console item (#4725) by @mabry1985 in #4909
- fix(memory): memory_list's description says 'logged' again, so log questions reach it by @mabry1985 in #4918
- test(evals): memory note intent uses a durable fact; status notes must not reach memory_save by @mabry1985 in #4919
- feat: ADR 0128 S1b (config): subagents. overlay generalised to ANY registered subagent (built-in or plugin) with profile / final_profile / model; SubagentConfig gains profile + final_profile; applied at init and reload (#4875) by @mabry1985 in #4916
- feat: Knowledge (ADR 0125 slice 6, server): POST /api/knowledge/delete-by-collection and restore-by-collection, a reversible soft delete with the same grace window as delete-by-source (#4630) by @mabry1985 in #4920
- feat(artifact): design-mockups skill + open_artifact browser link for rendered artifacts by @mabry1985 in #4926
Full Changelog: v0.233.1...v0.234.0