SSH 默认监听 2222 端口,网页视图与 MCP 共用 8080 端口,需按此连接;文档要放在仓库内的 docs/ 目录下再 serve;非 Homebrew 用户需另看 Quickstart 的 Linux/Windows 安装方式。
OpenLore
aakarimApache-2.0活跃维护面向 AI Agent 的轻量可扩展知识库,让多个 Agent 共享的上下文保持最新且可检查,解决 Agent 记忆与知识管理问题。
A minimal, extensible, agent-native knowledge repository that keeps shared context current and inspectable
brew install --cask aakarim/tap/lore
lore init my-knowledge
cd my-knowledge
openlore ./docsREADME 未说明硬件要求;从安装方式看是 Go 编译的服务器程序,未提及 GPU 或显存。
把 Markdown 文件夹变成团队所有 AI Agent 共享的实时知识库,带权限管控
面向 AI Agent 的轻量可扩展知识库,让多个 Agent 共享的上下文保持最新且可检查,解决 Agent 记忆与知识管理问题。
核心能力
- Agent 直接用 cat、grep、find 等已有 shell 工具检索
- 同一虚拟文件系统经 SSH、SFTP/SSHFS、MCP 和网页视图提供
- 按身份分配 ro、publish、rw 权限与私有家目录
- shell 为内存 Go 解释器,无进程执行与网络访问
- 用 lore meta 输出 NDJSON,配合 jq 查询 frontmatter
容易踩的坑
- v0.8.0v0.8.0 — Knowledge Import最新正式版2026-10-30 · 2026-10-30 13:46 UTC
Knowledge Import
Bring your agent memory and repo knowledge into OpenLore. Context that lives on one person's machine can become shared, versioned knowledge for the team, without moving the original files or giving the server access to your private Git credentials. You choose which imported stores agents can read.
Knowledge Import is the first phase of the Knowledge Gateway, not the whole gateway roadmap. This release delivers client-driven import from Claude Code, local folders, and Git repositories, a versioned docstore, and read-only projections. Automatic sync, arbitrary source connectors, importing as editable documents, and gateway-wide link verification remain future work. Learn how it fits together in the knowledge gateway guide.
New: the
loreclientThe release archives and Homebrew cask now ship two binaries: the
openloreserver and theloreclient. Runlorefrom your knowledge repository (the folder containingopenlore.yml). Enable the server's HTTP API, then:lore login https://lore.example.com # Choose and preview this project's Claude Code instructions and memory lore agent import claude --project # Or add a folder or Git repository lore source add ~/notes --name notes --include '**/*.md' lore source add https://github.com/acme/payments --name payments \ --branch main --include 'docs/**' --include '*.md' # Preview changes, then push a versioned snapshot lore status lore syncFor a new repository,
lore init [directory]creates default server settings without a login or overwriting an existingopenlore.yml. It does not initialise Git or create identities and access policy; configure those before syncing to a shared server (#234).lore loginsupports browser passkeys or a minted token.lore source listshows your sources andlore source rm <name>removes a source definition without deleting server history.lore agent connect claude|codexregisters the server with your coding agent.Serve imported knowledge to agents
Add a projection to the
docsetsobject inlore.jsonand grant its readers:{ "docsets": { "payments-docs": { "projection": { "store": "git/github.com/acme/payments", "subpath": "docs" }, "access": { "allow": { "engineers": "ro" } } } } }Run
lore config reloadin an OpenLore session withlore:config:editto mount the read-only docset at/payments-docs. Agents can read and search it over SSH, MCP, or HTTP. A projection under an identity's home can stay private to that identity. The agent-shell commandlore sourcesand the dashboard Sources view show projected stores and their latest snapshots.Supporting capabilities
- Live configuration reload: docsets, projections, mount paths, aliases, grants, and folder rules update without restarting the server, including for existing sessions on subsequent reads. Invalid reloads leave the running configuration unchanged; an already-started read may finish against the old configuration. Transport, authentication-provider and other startup settings still require a restart.
- Versioned docstore: sync uploads only new content-addressed blobs and retains snapshot history. Native writes to disk docsets are also snapshotted.
- Skills integration: server-fetched public HTTPS skill sources use the docstore, with per-installation applied and rejected versions. Invalid upstream versions leave the last valid installed skill available. Client Git stores remain separate from server-owned skill source stores.
- Content reorganisation: server file moves commit atomically and retain
provenance through
lore history <path>. Usage follows moves within the caller's readable query scope without counting moves as author
- v0.7.5v0.7.5 — Dashboard setup, folder icons, and reliability fixes2026-10-17 · 2026-10-17 22:28 UTC
查看更新说明
- Added configurable folder emoji icons through
.lore/config.yamlin the dashboard knowledge tree, plus a new gradient-slash PWA app icon. - The dashboard now goes straight to the passkey login page when sign-in is needed, and file copy actions sit beside the file name as icons.
- Fixed failed knowledge-facts scans getting stuck on the same queued path after a restart; failed scans now rebuild from docset roots while keeping the last completed results readable.
analytics show tree-sizeandlargest-docsskip unreadable descendants and report skipped paths instead of failing the whole result. An unreadable root still fails.findlists aliased docsets once by default;-Lfollows aliases, and an alias supplied as the starting point is still walked.ls -landstatshow aliases as links, andls -Rno longer descends through them.ls -landstatnow show write bits according to the caller's grant.publishrejects extra arguments instead of silently ignoring them; its two-argument examples have been corrected.- Added a knowledge cleanup recipe and a deployment guide with Fly.io, EC2 and DigitalOcean platform pages.
- Added the Build your company brain on OpenLore recipe, which explains what OpenLore already solves for a shared knowledge layer and walks through laying it out as docsets, connecting data sources, giving it to agents and capturing knowledge from across the organisation.
- Added a Setup view to the dashboard that shows how the
instance is configured for the signed-in identity: connection addresses,
server features, each docset's paths, grants, inbox and folder rules, and a
configuration tree listing every readable
.lore/config.yamland, for sessions that may edit configuration, the livelore.jsonandopenlore.yml. The Files tree and fuzzy finder no longer list.lorefolders or the/opt/openloreconfig mount; configuration files live on the Setup view instead. - Sessions with
lore:config:editcan now read the running server'sopenlore.ymlat/opt/openlore/openlore.yml, besidelore.json. The file is read-only over the VFS and is mounted only when the server was started from a config file.
Full changelog: https://github.com/aakarim/OpenLore/compare/v0.7.4...v0.7.5
- Added configurable folder emoji icons through
- v0.7.4v0.7.4 — Shell correctness, dashboard finder, and analytics reliability2026-10-12 · 2026-10-12 21:16 UTC
查看更新说明
Shell correctness, dashboard finder, and analytics reliability
Changes
- Added the Docsets concept page, which explains what a docset is, why access is organised around docsets, and how nesting, grants, aliases and startup validation work. Added the Transports concept page, which holds the MCP tools, command result format, session behaviour, JSON API endpoints and instruction commands formerly in Ways to use OpenLore. Ways to use OpenLore moved from Concepts to How to.
- The dashboard has a fuzzy file finder: press Ctrl+P (⌘P on macOS) or the
Find button, type part of a name or path, and press Enter to open the file
or scope Analytics to it. It is backed by a new
GET /dashboard/api/filesendpoint that lists readable files below a scope, capped at 10,000 with atruncatedflag. - The startup banner now reports whether the dashboard is ready and, when it
is not, the next steps: set
auth_file, remove an explicitpasskeys.enabled: false(passkeys are on by default), or a numbered guide for registering the first passkey over SSH and signing in. The dashboard shows the same steps instead of a bare error, the passkey login page walks through registration with thesshcommand filled in, and the dashboard no longer links to a login page on servers with passkeys turned off. - Added this changelog and guidance for matching documentation to an installed version.
- Fixed
printflooping forever when the format has no conversions but arguments are given (#167). - Documented that a successful write is saved but not fully validated: file
checks run on write, while link resolution, OKF bundle structure and alias
checks run only under
lore validate. The writing guide and theopenloreskill now carry a write → validate → finish workflow. - Regrouped the documentation into Introduction, Start, Concepts, How to and
Reference. Added the Auth concept page, which explains how each
credential resolves to an identity and now holds the workload identity
federation guide (the old
workload-identity-federationpage redirects there). Moved the inbox API, OAuth clients and write system pages to Reference. Split the old configuration and identity page: server setup is now the Configure the server how-to, and posture, roles, docsets, identities and inbox credentials live in Auth. awksupportsnextinstead of exiting 2 as unsupported (#175).- Fixed
awkregex patterns, variables and$0comparisons giving wrong results (#144). - Fixed the shell dropping a backslash before ordinary characters inside double quotes, which broke
grep "a\|b"(#161). - Fixed activity and command analytics failing for time ranges with more than 50,000 events (#152).
- Fixed analytics showing "Preparing analytics" indefinitely and refreshing endlessly on busy servers (#156).
- Activity tables (commands, searches, file and line usage) refresh incrementally from cached daily results, like activity totals, and cached analytics are no longer discarded every time the server restarts.
- The analytics dashboard shows knowledge and recent activity without waiting for all activity history. A new Status panel shows how far history has been processed.
- Fixed Status reporting analytic
- v0.7.3v0.7.3 — Verified v0.7 reliability release2026-10-01 · 2026-10-01 22:07 UTC
查看更新说明
Reliability across analytics, shell, and dashboard
OpenLore v0.7.3 publishes the verified v0.7 reliability work after v0.7.2 stopped before producing release artifacts.
Highlights
- Harden bounded, authorized analytics materialization and correct synthetic-session, exclusion, ownership-generation, and large-workspace behavior.
- Fix restricted-shell edge cases across
sed,grep,find,jq,xargs, glob expansion, andtail. - Preserve dashboard state across tab switches, restore desktop Markdown scrolling, handle incomplete usage data, and improve table rendering.
- Apply file policy to embedded files and correlate MCP shell activity with server sessions.
- Refresh configuration documentation, hook examples, and onboarding records.
- Add GoReleaser archives, Homebrew distribution, verified checksums, and durable
source-sha.txtprovenance.
Compatibility
No configuration migration is required. Unsupported shell options now fail clearly instead of being silently ignored. The v0.7.2 tag produced no GitHub release, Homebrew update, or GHCR image; install v0.7.3 instead.
Install or upgrade
go install github.com/aakarim/go-openlore/cmd/[email protected] openlore versionExpected output:
openlore 0.7.3.Full changelog: https://github.com/aakarim/OpenLore/compare/v0.7.1...v0.7.3
- v0.7.12026-09-19 · 2026-09-19 21:36 UTC
查看更新说明
What's Changed
- web: separate replaceable site from app assets by @aakarim in https://github.com/aakarim/OpenLore/pull/104
- Fix OPE-20: explain guest write restrictions by @aakarim in https://github.com/aakarim/OpenLore/pull/105
- Fix root analytics for workspaces over 64 MiB by @aakarim in https://github.com/aakarim/OpenLore/pull/106
- Cache current analytics facts per file (OPE-56) by @aakarim in https://github.com/aakarim/OpenLore/pull/108
- Fix MCP classification of non-zero shell output (OPE-7) by @aakarim in https://github.com/aakarim/OpenLore/pull/107
- chore: release v0.7.1 by @aakarim in https://github.com/aakarim/OpenLore/pull/109
Full Changelog: https://github.com/aakarim/OpenLore/compare/v0.7.0...v0.7.1
用户点评
登录用户的真实使用记录,可按版本和硬件筛选还没有人点评。第一个说出真实体验的人最有价值。
📜 OpenLore
Sponsored by
Give every AI agent on your team the same up-to-date knowledge.
Point OpenLore at a folder of Markdown and every agent on your team reads the same files, whether it's Claude Code, Codex, Cursor or a CI job. Agents use the tools they already know, like cat, grep and find. You decide who can see and change what.
Quick start
Install and set up a knowledge repository for your team:
brew install --cask aakarim/tap/lore
lore init my-knowledge
cd my-knowledge
lore init creates the folder and an openlore.yml with default server settings.
Already in your knowledge repository? Run lore init without a directory.
Put your Markdown in a docs/ folder inside the repository, then serve it:
openlore ./docs
SSH runs on port 2222. The web view and MCP share port 8080. The contents of ./docs appear at /.
Connect an agent:
# Claude Code
claude mcp add --transport http openlore http://localhost:8080/mcp
# Codex
codex mcp add openlore --url http://localhost:8080/mcp
# Anything with a shell
ssh -p 2222 localhost "grep -r 'retry' /"
Tell your agents when to use it:
ssh -p 2222 localhost agents >> AGENTS.md
Or let your agent do the whole setup:
ssh openlore.sh teach | claude
Not on Homebrew? See the Quickstart for Linux and Windows.
Why not just keep Markdown in your repo?
For one agent in one repository, do that.
OpenLore is for when several agents, repositories or people need the same knowledge, and you need to say who can read, write or publish what. Update a file once and every agent sees the new version on its next read.
There's no vector database, ingestion pipeline or SDK. Your knowledge stays as ordinary Markdown.
Guides
- What is OpenLore
- Claude Code
- Codex
- Cursor
- OpenCode
- Meta Muse
- OpenAI dots
- Grok Bot
- Claude Duet
- LangChain
- Any agent over SSH
- Let an agent publish into an inbox
- Deploy to Render
- Prune a knowledge repository from its analytics
- Build an LLM wiki on OpenLore
- Share a coding style guide with every agent
- All documentation
Features
- Agent-native retrieval — Agents use the shell tools and composition patterns they already understand instead of learning a bespoke retrieval API.
- One knowledge surface, multiple transports — Serve the same virtual filesystem over SSH, SFTP/SSHFS (including direct VS Code browsing and editing), MCP, and a human-friendly web view.
- Live, governed knowledge — Keep content read-only, allow scoped publishing, or enable full writes per docset. Writes are atomic, conflict-aware and validated before they commit.
- Identity-scoped views — Give each person or agent only the docsets it
needs, with role-based
ro,publish, andrwgrants, path aliases, and private home directories. - Safe by construction — The shell is an in-memory Go interpreter, not a real operating-system shell. There is no shell escape, arbitrary process execution, or ambient network access in a normal session.
- Portable knowledge bundles — Embed docs into a self-contained binary, build cross-platform bundles with the GitHub Action, or package them as a desktop MCP extension.
- Structured knowledge without a new query language — Inspect frontmatter
as NDJSON with
lore meta, query it withjq, and validate Google's Open Knowledge Format (OKF) bundles and Agent Skills close to the write path. - Extensible policy and processing — Plugins can add validation, grants, read/write middleware, metadata, and post-commit processing while preserving the same filesystem interface.
Use Cases
- Continuous Learning repository - store sessions and learnings in one shared server. Add metrics so you can optimise. Allow agents to share learnings with each other while maintaining user isolation.
- Team Artifact Repository - share markdown, HTML, JSON, Excel etc. documents you've created while maintaining access controls. Much more natural than git, more agent-native than Confluence/Notion.
- Documentation for coding agents — Put internal API docs, runbooks, product context, and architecture notes behind a familiar, greppable interface.
- A shared live memory for teams of agents — Give agents separate or shared docsets so they can publish findings, hand off work, and accumulate durable context across sessions.
- Public docs site - add any files to your public docset, enable public access and it will be shown to any agent that stumbles across your site. Improves AEO/GEO with no need to edit your existing docs.
- Skills sharing — Publish Agent Skills into shared collections so every authorised agent can discover and use the same governed procedures.
- Agent Plugins repository — Version-pin Agent Plugins repos from GitHub and serve them to your team's agents. Skills packaged in the open standard stay current automatically.
- Governed knowledge contribution — Let contributors publish into inboxes while reserving existing documents for maintainers and preventing accidental overwrites.
- Artifact repository — Store and expose reports, logs, screenshots, and generated files through the browser or SSH without building a custom artifact viewer or granting access to the agent's machine.
- Identity-specific workspaces — Mount a private home for each agent plus shared team knowledge, all through one server and one authorisation model.
- Portable customer or project knowledge — Ship a versioned executable with the relevant docs embedded, or distribute the same knowledge as an MCPB desktop extension.
- Validated knowledge catalogues — Enforce frontmatter and bundle conventions, inspect metadata cheaply, and stop malformed knowledge at admission time.
How It Works
OpenLore is built on Wish for SSH transport. A connection is handled entirely against a virtual filesystem:
- Authenticate — connect keylessly or resolve an SSH key, certificate, passkey, or OAuth login to an identity.
- Compose a view — mount only the docsets and paths granted to that identity.
- Explore — run shell commands implemented as pure Go functions over that
view, or use the equivalent MCP
lore_bashtool. - Contribute safely — if writing is enabled, authorise and validate a whole-file change before committing it atomically.
OAuth clients use delegated identities, so durable write provenance distinguishes
direct work by adil from work performed as adil/[email protected]. Delegates
can inherit no more authority than their principal and can be narrowed by
docset and capability deny lists. CIMD clients can additionally authenticate
with vendor-hosted metadata and private_key_jwt; see
Authenticated OAuth Clients.
The normal shell cannot invoke bash, exec, curl, or arbitrary host
processes. Embedded documentation is always read-only. Explicitly trusted
identities can be granted narrowly scoped asynchronous processing through the
spawn capability.
Governed Writing
OpenLore is read-only by default. Writable deployments keep a single,
policy-controlled write path for redirects, append, tee, patch, sed -i,
file moves, publishing, and trusted external jobs.
echo "# Research" | publish /backend/findings.md
cat change.diff | patch /backend/api.md
sed -i 's/old/new/g' /backend/runbook.md
Writes are whole-object atomic swaps. Compare-and-swap protection rejects stale edits by default, docset grants constrain the target, and plugins can validate or defer a write before it commits.
See Writing and publishing for user-facing setup and Write system internals for the implementation model.
Installation
See the Quickstart for Homebrew, Linux and Windows releases, and which installations include the dashboard. To build OpenLore yourself, see Building from source.
Embed docs in a binary
Place documentation in assets/lore/ and build. The resulting binary contains
the docs and serves them read-only at /docs when run with no directory
argument:
make dashboard-build # optional: include the web UI
go build -o my-docs ./cmd/openlore
Build with the GitHub Action
Produce cross-platform binaries with your docs embedded:
- uses: aakarim/openlore@v1
with:
docs-dir: ./docs
config: ./openlore.yml
See Ways to use OpenLore for direct VS Code editing, MCP stdio, MCPB desktop packaging, SSHFS, and Go library usage.
Create a customised deployment
Use the bundled setup skill to create <team>-lore, a small customer-owned
repository containing openlore.yml, a thin Containerfile pinned to an
official OpenLore release, and deployment artifacts. It builds a working local
server and verifies HTTP, MCP, authenticated SSH, writes, and persistence before
deployment:
ssh openlore.sh setup | amp
The generated repository keeps initial lore.json policy and SSH-visible files
under gitignored .local/. The first deployment initialises an empty persistent
volume from that state. Root openlore.yml remains the Git/IaC authority and is
deployed separately to /var/lib/openlore/config/openlore.yml; it is not baked
into the image. Later lore.json and filesystem edits on the server are
authoritative and are never overwritten by image updates.
Additional instruction commands support the full lifecycle:
onboardingadds initial identities, roles, homes, and folders locally;deployselects Fly.io, Railway, AWS, Google Cloud, Azure, DigitalOcean, or a custom deployment and verifies a shared persistence/networking contract;upgradeprepares only the pinned base-image version change so existing CD can deploy it.
Provider deployments require HTTPS/MCP, authenticated OpenLore SSH,
administrative shell access, and a persistent /var/lib/openlore volume. Where
the provider supports it, deployment configures public port 22 to forward to
OpenLore port 2222. Otherwise it reports the assigned port and recommends an
external TCP forwarding system.
The published container contains only OpenLore. It deliberately contains no
onboarding policy or server configuration. Before the service starts, the
deployment must put openlore.yml and lore.json in the persistent config
directory and run:
./out --config /var/lib/openlore/config/openlore.yml
This keeps configuration independently deployable: a simple deployment can
copy openlore.yml onto the volume, while Kubernetes can project the same file
from a ConfigMap. Use the deploy skill for Fly.io, Railway, AWS, Google Cloud,
Azure, DigitalOcean, or custom infrastructure. The repository's Railpack and
Fly files provide the image, persistent-volume, and port wiring; they do not
seed or mutate configuration at process startup.
For a quick hosted server without a customised repository, use the
Deploy to Render button. Unlike the Railpack and Fly files,
its start script writes a starter openlore.yml and lore.json to an empty
disk on first boot. Render serves HTTPS, MCP and the web view only; it has no
public TCP ingress for OpenLore SSH.
Railway assigns its SSH TCP proxy a public hostname and port. Standard SSH port 22 requires an external raw TCP load balancer. Fly.io can map public port 22 to OpenLore's internal port 2222 with a dedicated address. Raw SSH has no hostname or SNI routing, so one listener cannot route multiple domains on port 22.
The container workflow publishes latest from main; releases also publish
VERSION, vVERSION, major, and minor image tags.
Documentation
The same pages, in the same groups, are published at openlore.sh/docs.
Introduction
| Page | Contents |
|---|---|
| What is OpenLore | Serve, connect, scope, govern and observe in one page |
| Changelog | Current version, release notes, compatibility notes, and versioned docs |
Start
| Page | Contents |
|---|---|
| Quickstart | Install OpenLore, serve a folder, and connect an agent |
| Claude Code | Connect Claude Code over MCP and scope what it sees |
| Codex | Connect Codex over MCP |
| Cursor | Connect Cursor over MCP |
| OpenCode | Connect OpenCode over MCP |
| Meta Muse | Connect Meta Muse over MCP |
| OpenAI dots | Connect OpenAI dots over MCP |
| Grok Bot | Connect Grok Bot over MCP |
| Claude Duet | Connect Claude Duet over MCP |
| LangChain | Connect a LangChain agent over MCP and give it an identity |
| Any agent over SSH | Connect a coding agent or CI job over SSH and give it an identity |
Concepts
How OpenLore works: docsets, transports, identity, writes, rules, and observation.
| Page | Contents |
|---|---|
| Docsets | What a docset is, why access is organised around them, and how nesting, grants, aliases and fail-closed validation work |
| Transports | How SSH, SFTP, MCP, the JSON API and the web share one filesystem, the MCP tools, command results, sessions, and instruction commands |
| Auth | Authentication posture, how SSH keys, certificates, passkeys, OAuth tokens and inbox credentials resolve to an identity, roles, docsets, aliases, homes, and workload identity federation |
| Writing and publishing | Write modes, inboxes, conflict handling, what a successful write does and does not check, and jobs |
| Folder rules | .lore/config.yaml and lore.json rules, layering, permissions, rejection messages, and growth limits |
| Plugins and formats | Provider interfaces, Open Knowledge Format validation, lore validate, lore meta, and the Agent Skills plugin |
| Dashboard and metrics | Dashboard authentication, facts versus activity, and the file viewer |
How to
Task walkthroughs.
| Page | Contents |
|---|---|
| Ways to use OpenLore | Set up SSH, MCP over HTTP and stdio, the web view, SSHFS, embedded binaries, the GitHub Action, MCPB, and library usage |
| Configure the server | Create openlore.yml, precedence over embedded config and flags, HTTPS, analytics, and debug logging |
| Production checklist | What a shared server needs before cloud agents can reach it: a host with HTTPS out of the box, a pinned image on a volume, a public origin, a token on /mcp, passkeys |
| Let an agent publish into an inbox | Accept contributions from an agent without letting it edit anything else |
| Browse and edit from an editor | Direct VS Code and SFTP editor setup without a local project mirror |
| Run headlong / shellm | Use OpenLore over SSH from headlong's shellm engine, including its housekeeping skill |
| Build from source | Build the web UI and binary yourself, or build without the web UI |
| Deploy OpenLore to Render | One-click Render deployment, first passkey sign-in, upgrades, and custom domains |
Reference
Lookup material: commands, keys, endpoints, interfaces, and internals.
| Page | Contents |
|---|---|
| Command reference | Complete shell, introspection, publishing, syntax, CLI command, and flag reference |
| openlore.yml reference | Generated reference for every key openlore.yml accepts |
| Rules standard library | Generated reference for compiled-in rule members and their parameters |
| HTTP inbox API | POST /inbox/{docset} with bearer or HMAC credentials, and the token endpoints |
| OAuth clients | CIMD client identity, private_key_jwt, mTLS corroboration, and signing-key rotation |
| Write system internals | Filesystem layering, write seam, admission middleware, and async jobs |
| Build the dashboard | Frontend build and backend-only Go builds |
| Security evaluation | Threat model and security properties |
Security
- Commands run in a pure-Go interpreter, not through
os/exec. - The virtual filesystem cleans paths and enforces docset boundaries.
- Allowed file patterns and ignored directories keep secrets out of the view.
- RBAC controls reads, publishing, writes, approvals, and trusted capabilities.
- The web endpoint can publish the SSH host key over TLS to avoid blind trust on first use; SSH user and host certificates are also supported.
See SECURITY.md for the full security evaluation.
License
Apache License 2.0 — Copyright © 2026 Adil Karim
OpenLore bundles third-party open-source components. Their licences and required
notices are listed in
assets/legal/THIRD_PARTY_NOTICES.md, with
full licence texts in assets/legal/licenses/. These are
embedded in the binary and served by the running service at /legal.