# Ulysses Improvement Tasks Last updated: 2026-07-07 ## Priority: HIGH - [ ] **Floating windows overflow viewport after zoom/font changes — unreachable controls** `:root.ui-scale-125 { zoom: 1.25 }` renders all content 25% larger, but `window.innerHeight` doesn't change with `zoom` (CSS rendering only, not DOM). The `windowResize.js` saved-size restore at line 224 clamps to `window.innerHeight`, which after zoom makes windows 1.25× the visible viewport — pushing headers, close buttons, and top resize handles off-screen. The user literally can't close or move them. Fix: (a) divide restored height by zoom factor in the restore path; (b) add a general safety net — any `.modal-content` on open should clamp to `calc(100dvh / var(--ui-zoom, 1) - 40px)`. Also `windowResize.js` line 134 `if (top + height > vh)` needs zoom-aware `vh`. Current zoom compensation rules (line 181-196) only cover `.modal-content`, `.cal-modal-content`, `.settings-modal-content`, `#theme-popup`, `#cookbook-modal`, and `.pdf-export-overlay` — many windows lack the divisor. - [ ] **Fix manage_documents tool schema — missing "read" action** The `manage_documents` function-calling schema in `tool_schemas.py` has `"enum": ["list", "delete", "tidy"]` but the handler in `document_tools.py` supports `"read", "view", "open", "get"`. The model can't read documents through function calling. Fix: add read/view/open/get to enum, add `document_id`/`offset`/`limit` params, update description to mention reading. - [ ] **Add "Send to Chat" button to document editor** Button left of the Save button in `#doc-actions-footer`. Sends a document reference (title + doc_id + snippet) to the active chat, similar to how Cursor injects file references. Must NOT paste full content — just a reference the agent can resolve. Backend needs an endpoint or the existing `open_panel: documents` UI action may be enough. Requires: `POST /api/document//reference` or use existing `ui_control` with a new action. Frontend: insert button in `document.js` `_buildPaneHTML()` at line ~4598, wire JS handler. ## Priority: MEDIUM - [ ] **Bolster Library/Documents CRUD via MCP or native tools** Current document tools are solid but disjointed from agent-mode workflow. The agent has filesystem access (`read_file`, `write_file`, `edit_file`, `glob`, `ls`, `grep`, `bash`) but these tools operate on disk files, not Ulysses library documents. Need to bridge the gap: the agent should be able to list, read, grep, and edit library documents as naturally as files. Consider: - A unified `read_document` tool distinct from `manage_documents` (which is an admin-style multi-action tool) - A `grep_documents` or `search_documents` tool for semantic/fulltext search - Auto-inject active document content into agent context when relevant - [ ] **First-party document support in agent mode** Documents feel "disjointed from the agent." The agent creates documents fine but can't easily discover or reference existing ones contextually. Ideas: - "Agent workspace" awareness — automatically surface relevant documents based on chat context - Document references in chat that are clickable and auto-expand - The "Send to Chat" button (HIGH priority) is step 1; step 2 is making the agent proactively aware of library contents - [ ] **Improve `create_document` schema description** Current description is verbose and overlaps with `edit_file`/`write_file` disambiguation. Models sometimes use `create_document` for disk files. Add a clear leading signal: "DOCUMENT PANEL (not disk)" prefix like the existing "FILESYSTEM TOOL (not memory)" pattern. ## Priority: LOW - [ ] **Document library: batch operations** Multi-select, bulk delete, bulk export. Currently only single-document operations. - [ ] **Document version diff view** The version history panel shows versions but doesn't offer a side-by-side diff view between versions. - [ ] **Auto-language detection on document open** The editor auto-detects language on typing but not on initial document open from the library. Opening a Python file saved as "markdown" should suggest the language switch. --- ## Completed