thinkspace
Context-Aware Scratchpad
- Why: Context switching to Notion/Obsidian/Todoist kills focus.
- What:
thinkspace note "todo: fix env var issue"— later:thinkspace search "env"
✨ Features
- 🏷️ Auto-tags every note with your project (Git repo or folder) and time buckets (YYYY, YYYY‑MM, YYYY‑MM‑DD).
- 🔎 Search by text, tags, project, or time window. Uses SQLite with FTS5 full-text indexes when available, otherwise runs compatible LIKE queries.
- 📦 Zero-config local store in your user data dir (e.g.
~/.local/share/thinkspace/notes.db). - 🎨 Rich CLI output: readable tables, panels, and helpful highlighting.
- 🗑️ Safe deletes with per-note confirmation or an interactive picker.
- 🧰 Portable single dependency stack (Typer + Rich + Platformdirs).
🚀 Quickstart
pip install thinkspace
# or from source
pip install .
Add a note:
thinkspace note "todo: fix env var issue"
Search later:
thinkspace search "env"
List recent notes:
thinkspace list --limit 10
Filter by project:
thinkspace search "todo" --project my-repo
Show top tags:
thinkspace tags
Export to Markdown:
thinkspace export --out notes.md
Delete a note:
thinkspace delete 42
Clean up interactively:
thinkspace delete --interactive --limit 50
🧩 Commands
note [TEXT]– Capture a note. Use--tagmultiple times to add manual tags.search [QUERY]– Full‑text search with optional filters:--project,--since,--until,--limit.list– Show most recent notes.tags– Show top tags (auto & manual).db-path– Print the notes DB path.export– Export all notes (optionally filtered) to Markdown.delete [ID ...]– Remove one or more notes (prompts for confirmation unless--yesis provided, or open with--interactiveto choose from a checklist).
🏗️ How it works
- On first run, Thinkspace creates a tiny SQLite DB at your user data directory.
- Notes are stored with fields:
id,text,project,tags,created_at,path. - If SQLite FTS5 (the built-in full-text search extension) is available, Thinkspace builds an FTS5 virtual table so queries tokenize text and return ranked matches instantly.
- On systems without FTS5 compiled in, Thinkspace falls back to standard SQL
LIKEclauses—simple substring matching that works everywhere, though with slower lookups on large notebooks.
🧪 Testing
pip install -r requirements-dev.txt # installs pytest & mypy
mypy src
pytest -q
🧹 Linting
pip install -r requirements-dev.txt # installs ruff
ruff check .
ruff format .
📦 Publishing to PyPI
- Update version in
pyproject.toml. - Build:
python -m build
- Upload:
python -m twine upload dist/*
⚡ uv workflow
Prefer using uv for speed and reproducibility.
# 1) Create and sync a local env (writes uv.lock)
uv sync
# 2) Run the CLI from the project env
uv run thinkspace note "hello from uv"
# 3) Format & lint
uv run ruff check --select I --fix
uv run ruff format
# 4) Type checking
uv run mypy src
# 5) Tests
uv run pytest -q
# 6) Build & publish
uv build --no-sources
uv publish # set UV_PUBLISH_TOKEN with a PyPI token
Dev dependencies live in [dependency-groups] and are synced by default.
Metadata
Release files for thinkspace 1.0.2
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| thinkspace-1.0.2.tar.gz | 10.5 kB | Without provenance | Details for thinkspace-1.0.2.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| thinkspace-1.0.2-py3-none-any.whl | Python 3 | none | any | Details for thinkspace-1.0.2-py3-none-any.whl |
Total release size: 21.1 kB
Release files / thinkspace-1.0.2.tar.gz
| Download URL | thinkspace-1.0.2.tar.gz |
|---|---|
| Size | 10.5 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
729762305be42826e5112efef763d234bbbc1778c4ba33668aa8cc5f2ac1f065
|
|
BLAKE2b-256 checksum How to use checksums |
615debb8545fa7cf0046ddef30718e965b52caa4c2147728a3423da9b238ccee
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.5.2
|
Release files / thinkspace-1.0.2-py3-none-any.whl
| Download URL | thinkspace-1.0.2-py3-none-any.whl |
|---|---|
| Size | 10.6 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
a6cdb4007ca59b4768948259ee2e4fb5f3278bd1f63b4ab364b55deb88c3b09f
|
|
BLAKE2b-256 checksum How to use checksums |
90f1d7ca4ec9c8ac437c4ad1fcf365a358a69aeed5bce347adbf4f77330121ee
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.5.2
|
Security for thinkspace 1.0.2
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.