Skip to content

Releases: N9394/openlex

OpenLex 0.3.0

Choose a tag to compare

@github-actions github-actions released this 30 Oct 17:31
1beebee

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 -App when run as a script block) download the app from the GitHub release, check its sha256 (and its signature or GitHub attestation when cosign or gh is installed, saying which checks ran) and stop on a mismatch. macOS: the dmg for Apple Silicon or Intel, OpenLex.app copied into /Applications (or ~/Applications when that is not writable, no sudo), with a note when an old LexVault.app is still there; Windows: the installer runs silently for the current user, no admin; Linux: the AppImage into ~/Applications with 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 from SHA256SUMS. 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. /team or 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, from prices.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 go after 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 your openlex.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 /law that 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) and request_law_source_key (a secure field in the chat; the key goes straight into the OS keychain, never into the conversation).
  • /law in 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. /law in the terminal app (and Settings), openlex sources (openlex sources signin ansvar), GET /api/sources/law, agent tools search_law_sources and get_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/chat like 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...
Read more

OpenLex 0.2.3

Choose a tag to compare

@github-actions github-actions released this 29 Oct 21:18
6b95182

Security

  • The legacy desktop server (desktop/server) listened on all network interfaces; it now listens on 127.0.0.1 only. 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.sh and install.ps1). How to check a download: docs/VERIFY.md.
  • The install scripts also check the signature (with cosign) or the GitHub attestation (with gh) 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 test runs node --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.json made 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

Choose a tag to compare

@N9394 N9394 released this 29 Oct 15:29

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/openlex

Needs Node.js 20+. The Word add-in installers on the website will follow with the next installer build.

OpenLex 0.2.1

Choose a tag to compare

@N9394 N9394 released this 28 Oct 22:44

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_bash off 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/openlex

Needs Node.js 20+.

OpenLex 0.2.0

Choose a tag to compare

@N9394 N9394 released this 27 Oct 21:35
662ca86

First release of the open-source OpenLex engine and CLI (community build).

Install

brew install n9394/openlex/openlex

or 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.