{"id":51318609,"url":"https://github.com/jedbillyb/quill-writer","last_synced_at":"2026-07-01T10:31:28.382Z","repository":{"id":365603102,"uuid":"1272874493","full_name":"jedbillyb/quill-writer","owner":"jedbillyb","description":"Claude AI assistant sidebar for LibreOffice Writer — integrates via the Claude Agent SDK (Claude Code login, no API key)","archived":false,"fork":false,"pushed_at":"2026-06-29T02:04:23.000Z","size":55,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"master","last_synced_at":"2026-06-29T04:06:21.917Z","etag":null,"topics":["ai","anthropic","claude","claude-code","extension","libreoffice","mcp","python","uno","writer"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/jedbillyb.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-06-18T02:32:17.000Z","updated_at":"2026-06-29T02:04:26.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/jedbillyb/quill-writer","commit_stats":null,"previous_names":["jedbillyb/claude-libreoffice-writer","jedbillyb/quill-writer"],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/jedbillyb/quill-writer","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jedbillyb%2Fquill-writer","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jedbillyb%2Fquill-writer/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jedbillyb%2Fquill-writer/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jedbillyb%2Fquill-writer/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/jedbillyb","download_url":"https://codeload.github.com/jedbillyb/quill-writer/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jedbillyb%2Fquill-writer/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":35003452,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-07-01T02:00:05.325Z","response_time":130,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["ai","anthropic","claude","claude-code","extension","libreoffice","mcp","python","uno","writer"],"created_at":"2026-07-01T10:31:27.621Z","updated_at":"2026-07-01T10:31:28.371Z","avatar_url":"https://github.com/jedbillyb.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Quill\n\n**Quill** is a LibreOffice Writer extension — an AI writing assistant powered by\n**Claude**. It adds a native **Quill** sidebar: chat with Claude, rewrite the\nselected text, generate or continue writing, and summarise the document — with\nevery edit shown as an inline **diff** for **Apply / Reject** before it touches\nyour document.\n\nIt authenticates off your existing **Claude Code login (subscription)** via the\n[Claude Agent SDK](https://code.claude.com/docs/en/agent-sdk/python) — **no\nAnthropic API key required.**\n\n## How it works\n\n```\nLibreOffice (Writer)                         agent sidecar (Python 3.10+ venv)\n  Quill sidebar panel   ── JSON over a pipe ──  claude-agent-sdk\n  owns the document (UNO)                        in-process MCP server \"writer\"\n  applies edits on approval                      drives Claude via Claude Code login\n```\n\nThe extension exposes the document to Claude as **MCP tools**\n(`get_document_text`, `get_selection`, `replace_selection`, `insert_at_cursor`).\nClaude calls them; edit tools are gated by the sidebar's preview-then-apply UI.\nThe agent runs in a separate Python process (the *sidecar*) because LibreOffice's\nbundled Python is usually too old for the SDK; the two talk over the subprocess\npipe. Document edits are applied in-process via UNO as single undoable steps.\n\n## Prerequisites\n\n1. **Claude Code CLI**, installed and logged in:\n   ```\n   claude        # then /login if needed\n   ```\n2. **LibreOffice** with Python scripting (standard on Linux).\n3. A **Python 3.10+ environment with `claude-agent-sdk`** for the sidecar.\n\n## Install\n\n**Easiest — just install the extension; it sets itself up.** Install\n`quill-writer.oxt` (Tools → Extension Manager → Add, or `unopkg add\nquill-writer.oxt`), restart LibreOffice, and open the **Quill** sidebar. On\nfirst run it auto-creates its own Python environment at\n`~/.local/share/quill/venv` and installs the Claude Agent SDK — you'll\nsee \"Setting up Claude…\" in the panel for ~30s, then it's ready. Needs a\n`python3` with `venv` on PATH (and the Claude Code CLI logged in).\n\n**Or run the installer** (does the setup up-front instead of on first run, and\nbuilds the `.oxt` for you):\n\n```bash\n./install.sh\n```\n\nIt uses [`uv`](https://docs.astral.sh/uv/) or `python3 -m venv`. To remove\neverything later: `./uninstall.sh`.\n\n\u003cdetails\u003e\n\u003csummary\u003eManual install (what install.sh does)\u003c/summary\u003e\n\n```bash\nuv venv .venv \u0026\u0026 uv pip install -r requirements.txt   # sidecar SDK env\nmkdir -p ~/.config/quill\necho \"$PWD/.venv/bin/python\" \u003e ~/.config/quill/python\nPYTHON=.venv/bin/python ./build.sh                    # -\u003e quill-writer.oxt\nunopkg add --force quill-writer.oxt\n```\n\u003c/details\u003e\n\n### Pointing at a different Python\n\nBy default the panel launches `\u003cextension\u003e/.venv/bin/python`. Override with:\n\n```bash\nexport QUILL_PYTHON=/path/to/python3   # has claude-agent-sdk installed\n```\n\nOptional model override: `export QUILL_MODEL=claude-opus-4-8`.\n\n## Usage\n\n- **Rewrite**: select text, ask e.g. *\"make this more formal\"* → Claude reads the\n  selection and proposes a replacement; **Apply** or **Reject**.\n- **Generate / continue**: place the cursor, ask *\"continue this paragraph\"* →\n  Claude proposes an insertion to approve.\n- **Summarise**: ask *\"summarise this document\"* → Claude reads the full text.\n- **Chat**: ask anything; Claude answers in the panel without editing.\n\nApplied edits are single undo steps — **Ctrl+Z** reverts cleanly.\n\n## Project layout\n\n| Path | Role |\n|------|------|\n| `python/claude_panel.py` | UNO sidebar factory + panel UI, thread marshalling |\n| `python/sidecar_client.py` | Launches/streams the sidecar, routes document ops |\n| `python/writer_ops.py` | UNO document read/edit operations |\n| `sidecar/agent_main.py` | Agent loop: MCP server + `ClaudeSDKClient` |\n| `sidecar/writer_tools.py` | The `mcp__writer__*` tool definitions |\n| `*.xcu`, `description.xml`, `META-INF/manifest.xml` | Extension manifests |\n\n## Testing the backbone (no GUI)\n\n```bash\ncd sidecar\n../.venv/bin/python fake_panel_test.py ../.venv/bin/python \"Make my selection formal.\"\n```\n\nThis drives the real sidecar with a faked document and prints the tools Claude\ncalled and the edits it proposed — verifying Claude Code auth and the MCP\nround-trip without LibreOffice.\n\n## Status\n\nv0.1 — working: native sidebar (chat, rewrite selection, generate/continue,\nsummarise), in-document inline-diff preview with Apply / Improve / Reject,\nwhole-document rewrite, Enter-to-send, and Claude Code (subscription) auth with\nno API key. Document operations and the agent round-trip are verified against a\nlive LibreOffice.\n\n## License\n\nMIT — see [LICENSE](LICENSE). \"Quill\" is the name of this extension; it is an\nindependent project and is not affiliated with or endorsed by Anthropic. Note:\nthe \"Claude\" name and the current sidebar icon are Anthropic brand assets and\nare **not** covered by the MIT license; replace the icon before redistributing\nif you don't have permission to use it.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjedbillyb%2Fquill-writer","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjedbillyb%2Fquill-writer","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjedbillyb%2Fquill-writer/lists"}