Audit candidate workflows¶
These controls arrived in 0.3.1 with the October audit (audit/mellow-20261011).
0.3.0 does not include them all. Core editing remains offline,
modeless and usable at 80×24; AI remains optional. The
57-item tracker records verification and deferred scope.
Trust and execution¶
Opening a project starts restricted. Edit, search, save and recover normally.
Trust workspace execution in the palette reviews permission for installed
language servers, formatters and named tasks. Enter grants it for this session
and workspace; Restrict workspace execution revokes it and cancels running
optional integrations. --trust grants it explicitly at launch. Resolved files
outside that root, including symlink aliases, do not inherit execution trust.
Open another project separately to trust that project. Trusted tools are ordinary
unsandboxed local processes and may load configuration/plugins or use the network.
A manually opened shell runs commands you submit yourself.
Configure .mellow/tasks.json with command argument arrays:
{"validate": ["python3", "-m", "json.tool"]}
Run named task displays the exact command and asks for an explicit Enter
on it. It never implicitly saves or deploys. Output is bounded and sanitized;
recognized existing file:line[:column] locations are selectable. Escape
cancels the process group. Limits cover process input, exit and output pipes.
Command configuration is bounded to 64 KiB; control characters are refused.
Everyday editing¶
Save All first lists dirty tabs, then uses normal per-file Save As/conflict handling. A conflict or cancelled dialog stops the remaining queue; already saved files stay saved. It is not a filesystem transaction across files. Close all and Close other tabs reuse dirty-file confirmation, preserving cancelled work. Navigation back/forward returns to file and cursor locations from supported jumps. Compare with saved disk version shows a bounded, read-only line comparison; it changes neither version.
Select next occurrence / Select all occurrences edit matching text (up to 500 ranges). Bracketed paste and native/internal clipboard paste share multi-cursor, occurrence and rectangle operations. A multiline rectangle paste distributes its rows; each operation undoes together. Native clipboard adapters run in the background with a two-second bound. A changed document, selection or focus discards late paste; paste again at the intended position. A copy retains Mellow's internal text even if the terminal/native clipboard is unavailable. OSC52 delivery depends on terminal/tmux/SSH policy and is reported unconfirmed.
Indentation uses supported .editorconfig settings, then sampled file inference,
then indent_width (default four). Supported values are space/tab style and
widths 1–8, including parent/root rules and common star/question/brace patterns;
this is not the full EditorConfig specification. Click the status width or use
Change indentation width to cycle 2/4/8 for this buffer. Use tabs or spaces
is available in the palette. Enter, Tab/outdent, guides and visual tab columns
use the effective width. External formatters retain their own project rules.
Insert snippet template offers small local shell, Terraform, YAML and linked variable templates. Tab/Shift+Tab advances numbered placeholders; editing or pasting into a linked stop updates its partners. Escape ends the session. Unsupported nested/variable/choice syntax and ambiguous multiple edit targets are refused. This is a small local template feature; LSP snippet capability is not advertised.
Explorer file/folder creation, rename/move and deletion are searchable commands. Unavailable actions explain prerequisites. Delete moves an item into private trash; Restore deleted file / trash reviews a restore and never overwrites new work. Cross-filesystem moves fail while retaining the original. Trash is persistent and has no automatic purge; remove unwanted private entries manually only after reviewing what you no longer need. Open files must be closed before rename/delete. Keyboard bindings / edit keys lists effective bindings and opens their actual configuration file for ordinary editing; restart reloads it.
Checkpoints and recovery¶
Local history is separate from crash journals. Named eligible files receive
checkpoints before/after saves, accepted AI edits, restores and file operations.
Local history / restore checkpoint restores a selected version as an
unsaved, undoable edit; review it before Save. The final row explicitly forgets
all checkpoints for that file, leaving the file and recovery journal intact.
Set history_enabled = false to stop future recording. Existing checkpoints
remain until forgotten or pruned.
Private history excludes secret-like paths/content and files over 2 MiB. It keeps at most 20 checkpoints and 20 MiB per file, 100 MiB globally and 30 days, pruning when recording. A failed checkpoint never makes core editing unavailable. Permissions are private; history and recovery are plaintext, not encrypted vaults or substitutes for backups. Recovery continues to protect eligible unsaved work even when history is disabled.
Search and language workflows¶
Project discovery/search run in cancellable workers. Query generations prevent
late results replacing newer queries; the result summary records scope,
filters, skipped files and truncation. Named unsaved open files participate.
Use .mellow/search.json for optional include/exclude globs and explicit bounds:
{
"include": ["*.rs", "*.yaml"],
"exclude": ["generated/*"],
"max_file_bytes": 2097152,
"max_total_bytes": 67108864,
"max_results": 2000,
"max_files": 5000
}
Filters match relative paths; * matches any substring and ? one character.
Unknown/malformed configuration fails visibly. A partial scan is not evidence
of absence. Whole-buffer replacement preview remains supported; richer
multi-file replacement preview is explicitly deferred.
Trusted language services stay warm in a bounded pool (up to eight), synchronize open documents and aggregate scoped Problems. Completion resolves supported items and applies primary/supporting import edits atomically; stale or malformed edits apply neither. Provider completion commands are retained but not executed. Workspace edits are reviewed and coordinate undo/redo while their buffers remain unchanged. Server capabilities and startup indexing vary. See the real Python/TypeScript results, including the tested TypeScript installation pair and missing packaged language-UI qualification.
Safe Configuration Change¶
On a named JSON/YAML file, edit normally, then select Safe configuration change. The local structural review compares saved disk text with your candidate and redacts secret-like values. Duplicate/unsupported ambiguous syntax fails visibly. Built-in validation only checks the supported structure; it cannot certify your service's semantics. No command, save or deployment runs automatically.
Optionally configure .mellow/validators.json with a language argv array:
{"JSON": ["python3", "-m", "json.tool"]}
Trust the workspace, review the exact validator command and explicitly press Enter to run it with the candidate on stdin. A successful result for the same revision offers a separate explicit Save action. Failure, cancellation, changed text or unreadable/malformed validator configuration never offers a validated save. With no external validator configured, the view clearly offers only a built-in structural-check save. Ordinary conflict handling and eligible pre-save checkpoints apply. Rollback restores a checkpoint into the buffer, then needs review and Save. This tool does not deploy or control services.
Terminal Doctor¶
Terminal Doctor / key recorder reports delivered keyboard protocol, color
tier, paste events, configured key action and clipboard route. Press a troublesome
key to see the decoded event. Paste is counted without recording its contents.
C explicitly copies a report; Escape returns. It omits file paths and pasted
text. Crossterm parses raw input; the Doctor records delivered events rather than
claiming a raw-byte capture. SSH/tmux forwarding, actual glyph/font shaping and
screen-reader usability need native evaluation; the Doctor does not infer those
from a local PTY or contact any service.