Repository navigation
First release with the desktop app as a download (macOS, Windows, Linux; unsigned public builds, signed builds through support). The app now runs entirely on the open engine.
Added
- The desktop app through the install line.
curl -fsSL https://openlex.pinemarshlands.com/install | bash -s -- --app(macOS, Linux) and$env:OPENLEX_APP = 1; irm https://openlex.pinemarshlands.com/install.ps1 | iex(Windows; also-Appwhen run as a script block) download the app from the GitHub release, check its sha256 (and its signature or GitHub attestation whencosignorghis installed, saying which checks ran) and stop on a mismatch. macOS: the dmg for Apple Silicon or Intel,OpenLex.appcopied into/Applications(or~/Applicationswhen that is not writable, no sudo), with a note when an oldLexVault.appis still there; Windows: the installer runs silently for the current user, no admin; Linux: the AppImage into~/Applicationswith a menu entry. Because nothing is downloaded through a browser, there are no Gatekeeper or SmartScreen warnings; this is the recommended way until the app is signed by Apple and Microsoft.--all(OPENLEX_ALL=1) installs the app and the CLI; without either, the scripts install the CLI as before. The CLI's checksum can now also come fromSHA256SUMS. CI tests the app install on macOS, Linux and Windows (PowerShell 5.1 and 7) against a fake local release, including a checksum mismatch. - Panel: agents working together.
/teamor the "Panel" switch next to "Working as": several agents answer the same question side by side (attributed, in the agents' order), debate for N rounds (default 2; each must cite sources; a moderator — the judge or a chosen agent — sums up agreement, disagreement, the stronger position and open questions, citing only sources the agents brought and dropping quotes not found word for word), or draft and review (drafter → reviewer → drafter revises). One lane per agent with its step in plain words, who is speaking and what left the computer; Stop stops all. Before a panel on online AI an estimate (calls × agents × rounds, fromprices.json) to start; the monthly limit stops it between turns and keeps what was said; at most 3 agents at once (openlex.json→panel.concurrency), the AI on this computer one at a time. Each agent follows the data policy: an agent set to an online AI does not see a privileged matter and the lawyer is told. Result card with Word / PDF / Markdown export and "keep with the matter" (Saved, found by the search); the AI record lists which agent used which AI. Terminal: the same panel as plain text (/team …: question,/team goafter the estimate). API:POST /api/panel/estimate,POST /api/panel/run(streamed),GET /api/panel?id=,GET /api/panels,POST /api/panel/export. - Your own agents without JSON.
/agent new,/agent edit NAME,/agent from-chat("make an agent from this conversation"): name, what it does, which sources it may use (in plain words), where it runs, how thorough. Templates: Claimant's counsel, Defendant's counsel, Devil's advocate, Drafter, Researcher, Compliance checker. Saved in youropenlex.json, or the firm's for firm-wide agents ("lock": ["agents"]fixes the list). API:POST /api/agents/save|delete|propose. - The judge is on by default for answers. Besides proposed changes, prose answers that rest on sources get a second pass (quotes must be found word for word; one check call). Settings → "Check answers with a second pass (recommended)",
/judge on|off,GET/POST /api/config/judge; a firm keeps it on with"lock": ["judge"]. The turn summary says whether it ran. - More law sources, online by default, by country. OpenLex is the harness; the lawyer brings the data. New connectors (free unless noted): Legalize (statutes of 30+ countries with history: online with the lawyer's free key, 2,000 look-ups a month, or a git clone on this computer for offline work; "last updated" per country, flagged after 60 days), opencaselaw.ch (Swiss case law, CC0, over its MCP), Fedlex (Swiss federal law, SPARQL), Open Legal Data (German case law, community source), NeuRIS federal case law, gesetze-im-internet.de (German federal laws online, or all of them on this computer), legislation.gov.uk and Find Case Law (UK), BWB and rechtspraak.nl (NL), Légifrance and Judilibre (FR, one free PISTE key), eCFR, GovInfo (free key) and CourtListener (free token) (US), Sejm ELI and SAOS (PL), legislatie.just.ro (RO) and an opt-in Romanian community copy ("community data, no licence file"). Hungary, Cyprus and South Africa: "No open source allows automated access here", with the pages to read in the browser and a permission-request template.
- Ansvar first where it covers the country (free plan: 100 searches a day, browser sign-in); the official sources stay on as the second source.
- "Work fully offline": one switch in
/lawthat shows what it would download and how big it is, downloads after a yes (from the source itself, at its rate limit), and then answers only from this computer. Single sources can also be kept locally; every copy shows its size and last update and can be removed (/api/sources/law/download,/api/sources/law/offline,openlex sources download|remove|offline). - The AI sets sources up: agent tools
law_sources_status,enable_law_source(asked first) andrequest_law_source_key(a secure field in the chat; the key goes straight into the OS keychain, never into the conversation). /lawin the desktop app: grouped by country, a country filter, German words (statusDe), sign-in, keys, local copies.- The agent's own web tools keep to the source terms too: they refuse NJT, CyLaw, lawlibrary.org.za and SAFLII, and RIS outside its night window.
- Documents in the desktop app's chat, and the full document analysis as a chat tool. Attach (paperclip) or drop Word, PDF (scans read by text recognition on this computer), Excel, e-mail (.eml) and text files; the engine reads them (
POST /api/document/read, through the permissions broker and the matter's data rule) and says how each will be read./analyse(app, terminal, Word) or the button on an attached document runs the full analysis as a chat turn with live steps and shows it as a card: at a glance (kind, parties, purpose, governing law, key points, overall risk), risks with quote, place, law and a double-checked fix, deadlines, obligations per party, key terms, notable and possibly missing clauses, legal terms in plain words — with export buttons for Word, PDF and CSV, and "Read the document" with every finding highlighted. The analysis is kept in the matter's conversation, so it shows again in every window. This replaces the old Upload page's analysis (legacy server). - Large documents by model. A cloud model reads the whole document when it fits its context window with headroom, and providers that cache (Claude, Bedrock: an explicit breakpoint; OpenAI, DeepSeek, Mistral: automatically) keep it for follow-up questions; beyond the window the document is read in big parts guided by its outline. The local model keeps the outline + sections on demand, and a new setting "Memory for the local AI" (
/api/config/local-memory, automatic by default) decides its context size (llama.cpp--ctx-size) and so how much fits at once. See docs/LARGE_DOCUMENTS.md. - Big batches: a folder or many documents analysed one by one in the background with progress, Stop and Resume; before a big cloud run an estimate ("about 480 pages, roughly 640,000 tokens to Claude (EU), est. $3.10") to confirm (
/api/batch/*). - One size rule for files: about 100 MB per file everywhere in the engine (replacing 10, 20 and 50 MB limits), configurable, with one plain sentence above it.
- Law sources: OpenLex connects to where the law is published instead of maintaining its own copy. Official paths only. Free, without a key: RIS Austria (following the RIS open-data terms: one request every two seconds, live only 20:00–05:00 Vienna time, at weekends and on Austrian holidays, otherwise the lawyer's local copy with its date; an optional night copy), EUR-Lex (Cellar), German federal law (NeuRIS, "test phase, licence not yet published"), Slov-Lex Slovakia, e-Sbírka Czechia (the state's CC0 open data; the lawyer's free REST key from the Ministry of the Interior is an optional upgrade). Paid gateway with the lawyer's own account: Ansvar, by browser sign-in (OAuth 2.1, device code or PKCE, tokens in the OS keychain and renewed) or a Premium service credential. Every law-source answer says "Check the official version before relying on it." Step-by-step access guides per source in SOURCES.md. One interface with provenance on every result (source, URL, retrieval date, licence), the data policy and permissions applied, plain messages when a source is offline.
/lawin the terminal app (and Settings),openlex sources(openlex sources signin ansvar),GET /api/sources/law, agent toolssearch_law_sourcesandget_law_source. See docs/SOURCES.md. - The same "/" commands in every window. One list in the engine (
sidecar/src/commands.js,GET /api/commands?surface=app|word|tui&lang=en|de) with plain descriptions in English and German and which window supports each command. The terminal app reads it instead of keeping its own copy; the Word pane's "/" menu now shows the commands it supports (/model, /data, /as, /record, /clear, /help) before the firm's instructions; the desktop app's chat gets a "/" menu (also Ctrl+K / ⌘K) with /model, /data, /matter, /copy, /save, /word, /activity, /record, /clear and /help, run through the engine. - The desktop app's chat runs on the engine. Questions go to
POST /api/chatlike in the terminal app and the Word pane: the steps in plain words while OpenLex works, where the data went (always visible), Stop (keeps the answer so far), what the answer is based on (law sections open in full), proposed changes with their check, and the permission questions as a small dialog (Allow once / Always / Don't allow). Conversations live in the engine (GET /api/sessions?matterId=…,GET /api/session?id=…,sessionIdon/api/chat): a matter's conversation started in the terminal app or Word shows up in the app and the other way round. /as, /sources, /privileged, /permissions and /law now work in the app too. - The dashboard's recent conversations come from the engine (
GET /api/sessions), from every window. - The rest of the old desktop app on the engine, as chat tools (
/investigate,/diligence,/draft,/save,/savedin the app and the terminal app, EN+DE): an investigation over several documents (smart scan of long documents, quoted findings per document, law for what matters, a comparison across the documents and a second check that removes — and lists — statements the quotes do not support); due diligence of a data room (a review grid per document, quoted red flags in four tiers, change of control always flagged, what the data room lacks, a summary); drafting (write a draft or work on an attached document: changes by instruction with before/after and undo, ideas, a law check, fill-ins to make a template, every version kept, Send to Word). Each is a card in the chat with Word, PDF, CSV and Excel exports and "Save with the matter", and comes back with the conversation. Many documents run on the batch machinery (background, Stop, Resume, estimate). Saved (the old Vault) keeps answers, notes, clauses, documents and results per matter; the AI record page replaces the old Audit page; Ctrl+K searches matters, conversations, saved items, drafts, documents and commands through the engine. - A quiet hint line under the question field in the desktop app and the Word pane: "Type / for commands · ⌘K · /help" (hidden while you type).
Changed
- The old desktop server (
desktop/server) is off by default. The desktop app no longer starts it (OPENLEX_LEGACY_SERVER=1switches it on for a comparison); the sidebar's Analyse, Investigate, Draft and Due diligence open the chat with the command, Settings and the dashboard use the engine, and the old pages' addresses say where they went. The code stays in the repository for now.
Desktop app: OpenLex-0.3.0-mac-arm64.dmg (Apple Silicon), OpenLex-0.3.0-mac-x64.dmg (Intel Mac), OpenLex-0.3.0-windows-x64-setup.exe, OpenLex-0.3.0-linux-x64.AppImage. These builds are not signed by Apple or Microsoft: how to open them the first time is in docs/guides/desktop-app.md.
Verify this download: every file is signed (Sigstore, *.bundle) and has a build provenance attestation from this repository's release workflow. See docs/VERIFY.md.