Skip to content

Phase 4: Usability & interface improvements#6

Merged
schovi merged 1 commit intomainfrom
feat/phase4-usability-interface
Feb 18, 2026
Merged

Phase 4: Usability & interface improvements#6
schovi merged 1 commit intomainfrom
feat/phase4-usability-interface

Conversation

@schovi
Copy link
Copy Markdown
Owner

@schovi schovi commented Feb 18, 2026

Enhancement

Batch of 14 usability, correctness, and ergonomic improvements across CLI, MCP, and daemon. Follows the Phase 4 section of the consolidated code review plan.

Solution

Each fix targets a specific UX gap or correctness issue. Changes are intentionally small and independent per item, touching the minimal surface area needed.

Changes

Timeout handling (4.1):

  • exec and read (both CLI and MCP) return partial output on timeout instead of discarding it
  • MCP responses include a warning field alongside partial output

Input validation (4.2):

  • --cursor is rejected when combined with --snapshot or --follow (CLI + MCP)
  • Cursor-advance errors after blocking read are now propagated instead of silently ignored

Info endpoint (4.3):

  • info response includes cursors map showing all named cursor positions

Snapshot semantics (4.4):

  • Snapshot no longer updates global ReadPos (pure peek, no side effects on normal reads)

Idempotent create (4.5):

  • New --if-not-exists flag (CLI) / if_not_exists parameter (MCP) returns existing running session instead of error

List ordering (4.6):

  • list returns sessions sorted by creation time (oldest first) instead of random map order

Error messages (4.7):

  • Daemon startup failure now includes socket path, timeout duration, and troubleshooting hints
  • Detects stale socket scenario

MCP settle semantics (4.8):

  • settle_ms: 0 now means "don't wait" (previously treated as "use default 500ms")
  • Uses *int to distinguish "not provided" from "explicitly zero"

Kill help (4.9):

  • kill command help explains destructive behavior and suggests stop as alternative

SocketPath error handling (4.10):

  • SocketPath() returns (string, error) instead of silently producing invalid path on UserHomeDir failure

Memory storage correctness (4.11):

  • LoadMeta deep copies Cursors map and StoppedAt pointer to prevent shared mutation

Search display (4.12):

  • Search output respects --strip-ansi flag for display (was unconditionally stripping)

Documentation (4.13):

  • Removed stale --raw flag references from README (send always interprets escapes)
  • Updated auto-detector skill to reflect TUI mode support for vim/htop

FileStorage (4.14):

  • Removed redundant syscall.Flock from Append (Go mutex is sufficient for single-process daemon)

Root help (5.1):

  • Added quick-start examples to shelli --help

14 improvements across CLI, MCP, and daemon targeting better UX,
correctness, and developer ergonomics per consolidated code review plan.

- Show partial output on timeout instead of discarding (exec, read MCP)
- Add cursor+snapshot/follow mutual exclusion validation (CLI + MCP)
- Include cursor positions in info response
- Snapshot no longer updates global read position (peek semantics)
- Idempotent create with --if-not-exists / if_not_exists parameter
- Stable list ordering by creation time
- Better daemon startup error messages with socket path and hints
- MCP settle_ms: 0 now means "don't wait" (use *int to distinguish)
- Improved kill command help explaining destructive behavior
- SocketPath() now returns error instead of silently failing
- MemoryStorage.LoadMeta deep copies Cursors map and StoppedAt pointer
- Search display respects --strip-ansi flag (was always stripping)
- Remove redundant flock from FileStorage (Go mutex is sufficient)
- Update stale docs: remove --raw references, update TUI guidance
- Add quick-start examples to root --help
@schovi schovi marked this pull request as ready for review February 18, 2026 04:24
@schovi schovi merged commit bbd4c20 into main Feb 18, 2026
6 checks passed
@schovi schovi deleted the feat/phase4-usability-interface branch February 18, 2026 04:26
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant