Skip to main content

SWLL

Tests PyPI

A local context layer for your files, browser history, chats, and email — searchable, user-owned, and served to AI agents through MCP.

Version note. SWLL 1.0.0 is the first release of SWLL, continuing the codebase formerly published as footprinter-cli (last public release 1.1.1). The version resets to 1.0.0 because SWLL is a distinct, proprietary product — the reset is intentional, not a regression.

⚠️ Install with pipx, not pip. pipx puts the swll command on your PATH automatically; bare pip often doesn't — which leaves you with swll: command not found even though the install succeeded.

pipx install swll

Your work lives across filesystems, browsers, inboxes, chat histories, and other tools. SWLL indexes those sources into a single local store, organizes them into the projects and groupings you define, and serves the result to AI agents through a governed access layer. You control what the agent can see. Everything stays on your machine.

Install

Requires Python 3.11+ and macOS 13+ or Linux. The install script checks your Python version and handles the rest:

curl -fsSL https://raw.githubusercontent.com/swllcty/swll/main/scripts/release/install.sh | bash

Or install with pipx directly:

pipx install swll

Either method installs three commands: swll (the CLI and indexing pipeline), swll-mcp (the MCP server for AI agents), and swll-api (the HTTP API). Optional extras add more:

Extra What it adds
[semantic] Semantic search via ChromaDB + ONNX embeddings
[parse] PDF, Word, Excel, PowerPoint content extraction
[full] Both of the above

To install with extras: use the full install script, or pipx install 'swll[full]'.

Troubleshooting & alternative install methods

Python version: Stock macOS ships Python 3.9. Install 3.11+ from python.org or brew install python@3.11.

macOS caveats:

  • zsh treats [...] as a glob — quote extras specifiers: 'swll[full]'
  • System/Homebrew Python blocks bare pip install (PEP 668) — use pipx or a venv instead

Inside an existing venv: pip install swll works as expected.

Full Disk Access: Required for browser history indexing on macOS. swll setup will prompt you when needed.

ChromaDB telemetry: SWLL sets anonymized_telemetry=False. ChromaDB also removed product telemetry in v1.5.4. See Chroma OSS overview.

Apple Silicon (Rosetta): If swll doctor warns about x86_64 Python on arm64 hardware, recreate the venv with a native interpreter: pipx reinstall swll --python /opt/homebrew/bin/python3. This avoids compatibility issues with native-extension dependencies.

Uninstall

swll uninstall                        # remove MCP entry + user data
pipx uninstall swll      # remove the package

Quick Start

swll setup     # Configure sources (interactive wizard)
swll ingest    # Index your files
swll status    # See what's indexed
swll search "meeting notes"   # Find things

A few first-run notes:

  • The first ingest is implicitly full; subsequent runs are incremental. If you change exclusions or add directories after the first run, re-run with swll ingest --full so previously skipped files get picked up.
  • With [semantic] or [full], the first ingest downloads ~80MB of ONNX embedding model weights. It's a one-time cost — subsequent ingests are fast.
  • Keep the directories you want indexed outside ~/Downloads — the default exclusion list skips it.

Connect to Claude Desktop

SWLL includes an MCP server that gives Claude Desktop (or any MCP client) structured access to your indexed data:

swll setup mcp --claude    # Configure MCP for Claude Desktop

After running this, fully quit Claude Desktop (Cmd+Q) and relaunch before the SWLL tools appear in the conversation tools list. A simple window close isn't enough — the app keeps running in the menu bar.

Once configured, Claude can search your files, browse projects, and find related conversations — through natural language.

What It Indexes

Source What's captured
Local files Path, type, size, timestamps, content hash
Browser history Safari and Chrome — URLs, titles, visit times
Chat exports Claude and ChatGPT conversation exports
Email Subject, sender, recipients, body, timestamps
Documents PDF, Word, Excel, PowerPoint content (with [parse] extra)
Semantic embeddings Conceptual similarity across all sources (with [semantic] extra)

What lands in the database — and when — is controlled by the content storage tier you opt into. By default, SWLL only indexes metadata; it does not read your file content until you explicitly enable it. See Content Storage for the full breakdown.

CLI Commands

All commands use the swll entry point.

Command Purpose
swll setup Configure sources and integrations
swll ingest Run the indexing pipeline
swll status System health and data counts
swll search Search across all indexed sources
swll connect Manage optional integrations
swll permission Manage access policies (visibility, permissions)
swll view Browse indexed data (files, folders, projects, clients, chats, emails, visits)
swll add Create new entity records or import from CSV
swll update Update existing records by ID — status, assignments, metadata
swll delete Hard-delete a super entity (irreversible)
swll doctor Post-install health check (Python version, platform, FDA, MCP wiring)
swll uninstall Remove SWLL — MCP entry, user data, package

Run swll <command> --help for full usage.

Architecture

Single-process CLI with optional MCP server. SQLite database. No containers, no cloud, no accounts.

Sources are scanned into SQLite with bidirectional links connecting local files to remote backups via content hash matching. Embeddings are generated at ingest time for semantic search. The MCP server exposes indexed data with two-layer access control (visibility + access) — you decide what agents can see.

Documentation

Contributing

Bug fixes, documentation, and tests welcome. For new features or architectural changes, open an issue first to discuss the approach.

Development setup

git clone https://github.com/swllcty/swll.git
cd swll
python3 -m venv venv
./venv/bin/pip install -e ".[dev]"

Running tests

./venv/bin/pytest tests/ -v --tb=short

Code style

  • PEP 8
  • Type hints on function signatures
  • logging over print() in library code

Workflow

  1. Fork the repository
  2. Create a feature branch from main
  3. Write tests (TDD preferred — tests before implementation)
  4. Run the test suite
  5. Submit a PR targeting main

Never commit API keys, tokens, or credentials. Report security vulnerabilities privately — see SECURITY.md.

Pull request expectations

  • Tests must pass
  • No breaking changes to existing CLI commands
  • Fill out the PR template
  • One logical change per PR

All PRs are reviewed by the maintainer. Expect reviews within one week. CI must pass before review begins.

No Contributor License Agreement required. By submitting a PR, you agree your contribution is licensed under the project's MIT License.

Community

License

MIT — see LICENSE.

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

swll-1.0.0.tar.gz (344.4 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

swll-1.0.0-py3-none-any.whl (336.7 kB view details)

Uploaded Python 3

File details

Details for the file swll-1.0.0.tar.gz.

File metadata

  • Download URL: swll-1.0.0.tar.gz
  • Upload date:
  • Size: 344.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for swll-1.0.0.tar.gz
Algorithm Hash digest
SHA256 8d1755974fc333935c489f2b2bc123a741ab8377bc3d3d7e0333cae1e8daa0af
MD5 e75d39f33d1587bf308ce6bbdbbec101
BLAKE2b-256 d5c13f5d81fcf94a0873ef0494670dcec50c5a613d7429dd9566927a5e41ce5f

See more details on using hashes here.

Provenance

The following attestation bundles were made for swll-1.0.0.tar.gz:

Publisher: publish.yml on swllcty/swll

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file swll-1.0.0-py3-none-any.whl.

File metadata

  • Download URL: swll-1.0.0-py3-none-any.whl
  • Upload date:
  • Size: 336.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for swll-1.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 557a702d5ec28dfa241f0b2428835b5b70457bf7ffe743e7e7439b7c34afa0eb
MD5 4e92a4f1c98347645ff132da7074ad2d
BLAKE2b-256 e047a918a29a19c8dbd8b95b35fbdaa9617a0babbc86b5d023519649228d46fa

See more details on using hashes here.

Provenance

The following attestation bundles were made for swll-1.0.0-py3-none-any.whl:

Publisher: publish.yml on swllcty/swll

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page