Skip to content

Beta v0.8.6

Choose a tag to compare

@YELANDAOKONG YELANDAOKONG released this 16 Oct 14:58
· 23 commits to release since this release
2160f58

What's Changed

πŸš€ New Features

  • Session directory access for built-in file tools (c750343) β€” /access lists the session's directory rules, add <path> read|write adds or replaces one, and remove <path> drops it, with repeatable --allow-read and --allow-write flags seeding the launched session. Covered directories are treated like workspace paths for read and write approval, a read rule refuses file writes before classification and path resolution, and the rules persist in the session document.
  • Per-workspace default directory access (647e88f) β€” /access default lists the defaults saved in ~/.crystal/access.json, and default add <path> read|write / default remove <path> change that file and the current session. New sessions, /clear, /fork, and a successful /cd or /space copy the destination workspace's defaults, while /resume keeps the saved session rules.
  • F6 quick prompts (3dc6b96) β€” Pressing F6 opens a picker over direct .md templates in ~/.crystal/shortcuts, searching names and bodies with Fill and Send modes, and every open starts in Fill. Fill inserts at the composer cursor without replacing the draft; Send submits the template alone, keeps the draft and its images, and queues while a turn is running without interrupting it.
  • Compaction model and forced prompt attachments (7ab2d24) β€” compactionModel in config.json gives summaries their own provider, model, and thinkingEffort, shown and changed with /compact model and /compact thinking and reported by /status while it is on. The launch flags --compaction-model, --compaction-provider, --compaction-model-id, --compaction-thinking, and repeatable --prompt-attachment <name> apply to one process without writing config.json, and a forced attachment cannot be changed with /promptattach.
  • Microcompaction and larger compaction budgets (2b692a6) β€” With microCompaction enabled, old successful tool results are replaced with the omitted-result note before each model call, keeping the latest protectTurns user turns and protectTokens of newer results and rewriting only when the removed text is larger than minimumTokens. /compact micro toggles the switch, /status shows a Microcompaction row while it is on, and compaction reserves up to 16384 tokens for the summary, keeps a verbatim tail of at most 32000 tokens, and discards a summary that stops at its output limit.
  • Slash commands queued during a turn (1ac7418) β€” Slash commands typed while a turn is running are held out of the message queue and run as commands when the turn finishes, so /fork or /status no longer reach the model as prompt text. A queued command that stops a busy turn still interrupts it.
  • Slash commands typed during compaction (f0d0ee3) β€” Commands that only report state or adjust the display run immediately while compaction is in progress, commands that would change the session are refused with the busy-turn message, and /quit cancels compaction and exits.
  • Verbose switches for results, review cards, and tool cards (4eb843c, 1f07d9b, a0c2e90) β€” /verbose results is a new parent switch for success result panels (verboseResults in config.json), and verboseTools / verboseCommands now only act while it is on. /verbose review and verboseReview control review allow cards independently of verboseApprovals, and /verbose calls and verboseCalls hide the Tool cards themselves without touching results.
  • Rule file switches (7ea48a2) β€” /rules shows the OpenCode-compatible global and project rule files and accepts on / off for both or global / project plus on / off for one side, storing the choice in ruleFiles within config.json. --rules on|off or global=on|off / project=on|off applies to one process without writing the file, and neither form affects instructions.md or .crystal.md.
  • Plugin-registered status line fields (e7c0bc1) β€” Disk plugins can register named status fields, and the operator adds the lowercase name to statusLine or through /statusline to show text the plugin pushes. /statusline lists each loaded plugin field with its directory and description, keeps a saved name when the plugin is not loaded, and marks it unavailable.
  • Bounded tree tool (4e68aff, 08e8843) β€” The built-in tree tool lists a workspace directory depth-first with a depth bound, a per-directory file cap, and a total-entry cap, lists a directory link once under its resolved path, and skips ignored directories, links that leave the workspace, and credential paths. Cap notes now name the workspace root instead of ..
  • GFM tables in the transcript (75f822e) β€” Assistant markdown now renders GitHub-flavored tables, aligned by display columns, wrapped inside a column, or stacked when the terminal cannot give every column its minimum. A table that cannot be parsed or laid out is shown as its original lines.
  • Compaction summary switches (c635881, 6657748) β€” /compact summary toggles the manual summary panel and /compact auto toggles the same panel after automatic compaction, each accepting on or off and writing config.json without summarizing. Automatic compaction prints Compacted context and, with the new showAutomaticCompactionSummary switch on, the full summary panel.
  • Context budget launch override (cb118b7) β€” --context <budget> selects one of the chosen model's declared local context budgets for that process, using the same 272k / 1m / exact-token syntax as /context. The choice is not written to contextSelections, and a model with one budget or one that does not declare the value is rejected.
  • {{directories}} prompt placeholder (21d43c2) β€” Prompt templates gain {{directories}}, which prints the session's directory access text or nothing when there are no rules and refreshes when the live system message is replaced, including after /access.

πŸ› Fixes

  • Deferred stop commands (f6bbd06, f5cf4a4, 2160f58) β€” /quit, /clear, /resume, and /fork now stop a busy turn even when other session work is still on the stack, stay in the Queued panel, and run in the order they were typed. /clear, /resume, and /fork drop follow-up text still waiting in the queue, and the panel reflects that.
  • Responses stream parsing for gateway variants (7f448ff) β€” Responses SSE streams that omit or reshape fields no longer throw: items without a type are skipped, a function call missing an identifier or name is rejected with a clear message, and missing usage counts are treated as absent usage. Chat Completions token names are accepted on Responses usage objects, and error events report the provider message and code from flat, nested, and response.failed shapes.
  • Session access entry paths and saved rule validation (bbf7133) β€” Each rule records the path it was added with, so /access remove <path> still revokes it after the entry symlink is deleted or retargeted, and invalid saved rules report a visible error instead of failing startup or replacing the current session. The glob, grep, and search descriptions now state that roots may be workspace-relative or absolute and that only the requested root is searched.
  • Directory access across links (2173f4c, fb3399f) β€” Saved directory access rules and prompt history now match a workspace by its canonical path, so defaults and history apply to workspaces reached through an ancestor link, and --allow-read and --allow-write resolve relative paths against the operator's workspace path rather than the resolved target.
  • Transcript and summary budget after microcompaction (9171dd8) β€” The transcript is no longer lost after a microcompacted round, and the review conversation keeps messages added later in the turn. The summary reserve is capped at half the summary window so a small context window can still send the conversation.
  • Forked reasoning state (7594716) β€” /fork now copies reasoning segments and the opaque reasoning state, so a forked session keeps its summaries and provider signatures instead of sharing or losing them.
  • Recalled slash commands in prompt history (7ce4931) β€” Up and Down keep walking recalled entries that start with / without the slash picker taking over, and editing such an entry leaves history and opens the picker again.
  • Plugin status field ordering (40a3f43) β€” Plugin status snapshots are published in the order they were taken, so an in-flight update can no longer reorder text or swallow a Clear from a plugin reload or close. The status sink attaches once per loaded catalog, and a failed sink's text is dropped.
  • Background bash output as command output (a980699) β€” bash_start, bash_status, bash_logs, and bash_stop results now count as command output, so they follow verboseCommands and command formatting in the run log instead of riding with generic results.
  • Markdown table width sharing (27d407d) β€” Table overflow is spread across the widest columns instead of one column absorbing the whole cut, so wide tables wrap into readable cells rather than a tall ribbon.
  • CTX percentages (506ea17) β€” Used and left context percentages now show one decimal place, round to the nearest tenth, and always sum to 100.0.
  • Cancellation after bash_stop (4fb7059) β€” Cancellation requested while a background bash task is being stopped is now honored, so a cancelled turn or session exit completes instead of continuing.

⚠️ This release is large and touches many parts of the product. If you run into any issues, please report them via GitHub Issues. πŸ™

Full Changelog: B0.8.5...B0.8.6