A fast TUI lens over work knowledge
Project description
lazylens
A fast terminal lens over work knowledge.
lazylens builds a local SQLite/FTS index for project documents, then gives you
a keyboard-first Textual TUI for search, structure navigation, previews, and
document relationships. It currently supports local folders and Confluence
Cloud. SharePoint is planned next.
It is useful when you want to explore work documents quickly without waiting on browser search, full sync clients, or heavyweight document UIs.
Screenshot
Features
- Local SQLite index with FTS5 search.
- Local folder indexing for Markdown, text, and other readable project files.
- Confluence Cloud indexing with page hierarchy, folders, snippets, and links.
- TUI structure navigation: source, top-level pages, folders, and child pages.
- Relationship navigation: outgoing and incoming document links remain global.
- Browser/file opening from the selected page.
- Optional Nerd Font icon mode for richer terminal presentation.
Install
From PyPI, once published:
pipx install lazylens
lazylens --help
From a checkout:
git clone https://github.com/richlee/lazylens.git
cd lazylens
python3 -m venv .venv
.venv/bin/python -m pip install -e ".[dev]"
.venv/bin/lazylens --help
On Windows PowerShell:
git clone https://github.com/richlee/lazylens.git
cd lazylens
py -m venv .venv
.\.venv\Scripts\python -m pip install -e ".[dev]"
.\.venv\Scripts\lazylens --help
Quick Start
Create a local demo source and open the TUI:
lazylens demo
lazylens
For your own local folder:
lazylens init --root ~/Documents/notes --name Notes --key notes
lazylens index
lazylens
Useful commands:
lazylens doctor
lazylens index
lazylens search architecture
lazylens
Confluence Setup
lazylens uses Atlassian API-token basic auth for Confluence Cloud. Search in
the TUI remains local; the Confluence API is used only to refresh the SQLite
index.
Generate config and an env-file skeleton:
lazylens init confluence \
--base-url "https://example.atlassian.net" \
--email "you@example.com" \
--space-key ARCH
Edit the generated env file and paste an Atlassian API token:
${EDITOR:-vi} ~/.config/lazylens/atlassian.env
source ~/.config/lazylens/atlassian.env
lazylens doctor
lazylens index personal-confluence
lazylens
The token should stay in ~/.config/lazylens/atlassian.env or your shell
environment, not in config.toml.
For personal or non-client testing, create a small Atlassian Cloud site, add a
dedicated space, create an API token from your Atlassian account security
settings, then run lazylens doctor before indexing.
Configuration
Default config path:
- macOS/Linux:
~/.config/lazylens/config.toml - Windows:
%APPDATA%\lazylens\config.toml
Default database path:
- macOS/Linux:
~/.local/share/lazylens/index.sqlite3 - Windows:
%LOCALAPPDATA%\lazylens\index.sqlite3
Example:
database = "~/.local/share/lazylens/index.sqlite3"
[ui]
icon_style = "ascii" # ascii, unicode, or nerd
[sources."notes"]
name = "Notes"
type = "local"
root = "~/Documents/notes"
[sources."personal-confluence"]
name = "Personal Confluence"
type = "confluence"
space_keys = ["ARCH"]
page_limit = 100
max_pages = 5
For Confluence, space_keys is usually the friendliest scope to configure. You
can also configure space_ids if you already know them. page_limit controls
API page size, and max_pages limits how many API result pages are fetched per
space.
If needed, base_url, email, or api_token_env can be set on a source. The
token value itself should stay out of TOML. CONFLUENCE_BASE_URL may be either
the Atlassian site root or the /wiki URL.
TUI Keys
1-9: switch source/: focus searchc: clear searchr: refresh configured sourcesEnter: select structure, open pages, or drill into foldersRight/Space: drill into page/folder children or follow selected linksLeft/Backspace: go back from a drilled viewq: quit
Icons
The TUI defaults to portable ASCII labels. For richer icons:
[ui]
icon_style = "nerd" # ascii, unicode, or nerd
nerd mode expects a Nerd Font in your terminal, for example FiraCode Nerd Font.
On macOS with Homebrew:
brew install --cask font-fira-code-nerd-font
Development
python3 -m venv .venv
.venv/bin/python -m pip install -e ".[dev]"
.venv/bin/python -m pytest
The project is intentionally local-first: remote APIs refresh the index, while interactive search/navigation reads from SQLite.
See docs/plan.md for the broader direction.
References
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file lazylens-0.1.0.tar.gz.
File metadata
- Download URL: lazylens-0.1.0.tar.gz
- Upload date:
- Size: 34.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
29a9a49a2229d8bafffb65615b36ce836ff84e5bae6f1641e4efd65517404e8a
|
|
| MD5 |
e5d04cbc1d39b2f50c3b9460f87b0887
|
|
| BLAKE2b-256 |
0e90948d1a9736ccf41b11f23e574e27b920433111a6b0676bae84e63b00214b
|
Provenance
The following attestation bundles were made for lazylens-0.1.0.tar.gz:
Publisher:
publish.yml on richlee/lazylens
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
lazylens-0.1.0.tar.gz -
Subject digest:
29a9a49a2229d8bafffb65615b36ce836ff84e5bae6f1641e4efd65517404e8a - Sigstore transparency entry: 2190182627
- Sigstore integration time:
-
Permalink:
richlee/lazylens@919b31063a433b1e9813accda3161ecc644220b7 -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/richlee
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@919b31063a433b1e9813accda3161ecc644220b7 -
Trigger Event:
release
-
Statement type:
File details
Details for the file lazylens-0.1.0-py3-none-any.whl.
File metadata
- Download URL: lazylens-0.1.0-py3-none-any.whl
- Upload date:
- Size: 27.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
549966222a3970623a83b06875a2ef5f87ab1d358007c8813cf4d59ec56180eb
|
|
| MD5 |
91dc6c7992d7de8c03019fbf5575b4a8
|
|
| BLAKE2b-256 |
712371a1837910aea1f2f16cbe703387e80098f9c9c6162469989e46aa916663
|
Provenance
The following attestation bundles were made for lazylens-0.1.0-py3-none-any.whl:
Publisher:
publish.yml on richlee/lazylens
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
lazylens-0.1.0-py3-none-any.whl -
Subject digest:
549966222a3970623a83b06875a2ef5f87ab1d358007c8813cf4d59ec56180eb - Sigstore transparency entry: 2190182639
- Sigstore integration time:
-
Permalink:
richlee/lazylens@919b31063a433b1e9813accda3161ecc644220b7 -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/richlee
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@919b31063a433b1e9813accda3161ecc644220b7 -
Trigger Event:
release
-
Statement type: