Repository navigation
Releases: N9394/openlex
Release list
OpenLex 0.3.0
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 s...
OpenLex 0.2.3
Security
- The legacy desktop server (
desktop/server) listened on all network interfaces; it now listens on127.0.0.1only. A test checks that every server in the engine, the desktop shell and the legacy server binds to loopback.
Added
- AI record: a tamper-evident log of what the AI did (which model, which sources, what was sent online, which actions were approved), hash-chained so later edits are detectable, readable and exportable from the Word pane, the terminal app and the CLI.
- Releases are built, signed and attested on GitHub: a reproducible CLI tarball, an SBOM (CycloneDX), Sigstore signatures (
*.bundle) and GitHub build provenance for every file. The install scripts are release files too (releases/latest/download/install.shandinstall.ps1). How to check a download: docs/VERIFY.md. - The install scripts also check the signature (with
cosign) or the GitHub attestation (withgh) when those tools are installed, and say which checks were made. - CI on Linux, macOS and Windows with Node 20 and 22, and a packaging smoke test.
- SECURITY.md, CONTRIBUTING.md and this changelog.
Changed
- Prompts, start-up messages, report footers, exports and user agents say OpenLex instead of LexVault. Data folders, settings and identifiers that existing installs depend on keep their names.
npm testrunsnode --test test/*.test.js(Node 22 no longer accepts a folder).
Fixed
- Windows: on-device OCR kept umlauts and the section sign (PowerShell now reads and writes UTF-8).
- Changes to
openlex.jsonmade twice within the same second are no longer missed. - Two saves of a file within the same millisecond no longer overwrite each other's earlier-version copy.
- Windows: the plugin updater extracts with the system
tar.exe, not a GNU tar from Git for Windows on PATH. - Desktop app: the engine log file handle is no longer leaked on every engine start.
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.
OpenLex 0.2.2
OpenLex 0.2.2
Word add-in: the main tool for lawyers, redesigned.
- A calm pane: your matter, the conversation, "Your data" and one main action, Review this contract. Everything else is in What can I do here? (⌘K / Ctrl+K).
- Review a contract clause by clause: choose the side you act for, a firm checklist and focus areas. Each finding goes into the document as a tracked change plus a comment with the legal basis. The review ends with a summary, Accept/Reject per finding and Save as Word/PDF.
- See what it's doing: a few plain steps while it works, "Your data: ✓ Nothing has left this computer" (or exactly where it went), numbered sources under each answer, and "checked against … ✓" on every suggestion. Stop keeps what was written.
- Comments in Word work again, your draft is never overwritten, and the pane is keyboard- and screen-reader-friendly and follows Word's light/dark theme.
Document analysis and matter overview (Word menu, /analyse, openlex analyse):
- A summary, parties, key terms, deadlines, obligations, and risks with suggested fixes. Every finding quotes the document word for word, and findings whose quote can't be found are removed. You get a readable report and a Word report.
- Matter at a glance (
openlex matters show): findings, deadlines, decisions, notes and sources, with recall search (openlex recall "liability cap") and a memo export.
Terminal app:
- Works in the folder you start it in: it reads what's there, asks before saving or renaming, always asks before deleting, and can't reach anything outside.
- Clearer everywhere:
- you always know where you are and which keys work;
- a first-run tour, examples and "Did you mean /model?";
- Esc never quits, and errors explain what to do;
/copy,/save,/transcript;- accessibility settings: screen-reader mode, reduced motion, plain ASCII, no colour-only meaning.
Install / upgrade
curl -fsSL https://openlex.pinemarshlands.com/install | bash
brew upgrade openlex # or: brew install n9394/openlex/openlexNeeds Node.js 20+. The Word add-in installers on the website will follow with the next installer build.
OpenLex 0.2.1
OpenLex 0.2.1
Terminal app. Type openlex and a full-screen app opens: a setup wizard (where the AI runs, your key, where client data may go), matters with a privileged switch, chat with sources, files dragged into the window, and every task (review, chronology, translate, compare, review grid, plans) in an Actions menu. Choose who OpenLex works as with Tab instead of typing @.
Change things mid-session. /model, /key, /data, /as, /privileged, /permissions, /clear. From the command line: openlex use, openlex key, openlex policy, openlex providers, openlex test.
It asks before it acts. Saving files, running commands, opening the web or using a connector needs your OK: allow once, always for this matter, always, or don't allow. Firm rules that forbid something always win; with nobody to ask, the answer is no.
Any model, driven by a profile. Thinking, tool calling, temperature and context come from a model profile (openlex models), not from checks on the name. Firms can change or add profiles in openlex.json.
Leaner prompts. Instructions reach the model at the step that needs them: a plain question starts with ~360 tokens of instructions instead of ~1,900. openlex prompts "question" shows what each step gets.
More:
- The firm's own databases and subscriptions as data sources.
run_bashoff by default and sandboxed.- Privileged matters can't be opened up to a cloud model.
- Guides for lawyers in
docs/guides. - The desktop app works without an account.
- A Windows installer (
install.ps1, not yet tested on Windows).
Install / upgrade
curl -fsSL https://openlex.pinemarshlands.com/install | bash
brew upgrade openlex # or: brew install n9394/openlex/openlexNeeds Node.js 20+.
OpenLex 0.2.0
First release of the open-source OpenLex engine and CLI (community build).
Install
brew install n9394/openlex/openlexor unpack openlex-0.2.0.tar.gz anywhere (needs Node ≥ 20) and run ./openlex.
Start
openlex serve # the local engine (keeps running)
openlex status
openlex ask "Which GDPR article governs processors?"Bring your own model: a cloud key (Anthropic, OpenAI, Azure, Mistral, OpenRouter, Bedrock, Vertex) or a local llama.cpp (brew install llama.cpp + a GGUF). The data policy is local-only until you allow a provider.
In this release: matters and per-matter data policy, firm library and clause library, workflows (review, chronology, translate, compare), review grid with Excel export, skills and playbooks as files, plans with checkpoints, monitors (EUR-Lex, Austrian federal gazette, RSS, pages), lists, the harness map (openlex.json: model routing per role, hooks at decision points, agent profiles), System One decision-model connector (Kev / Jev), MCP client and server, local API. Docs: docs/HARNESS.md, docs/LOCAL_API.md.