Base Layer Context
Persistent, private memory for coding agents.
Never re-explain your codebase to your agent. Automatic, durable recall across sessions, machines, and restarts.
The Payoff: Immediate Agent Recall
We meet you where you work—the console—and then stay out of your way. Once installed, your coding agent gains automatic, persistent context across all your projects.
When you return to your codebase after days or weeks away, your agent recalls recent work, decisions, and milestones with full cryptographic provenance:
Why Base Layer Context?
Coding agents suffer from agent amnesia. When a session ends, the context window vanishes. Manually copying summaries or repasting task descriptions is tedious and burns tokens.
Base Layer Context bridges this gap with a lightweight, private, system-level memory daemon:
- 🧠 Zero Manual Effort: Automatically captures session starts, turn milestones, and completions via non-blocking lifecycle hooks.
- 🔒 100% Local & Private: Embeddings run locally on your CPU with FastEmbed (
BAAI/bge-small-en). Vectors stay on your SSD in Qdrant. Zero telemetry, zero external API calls. - ⚡ Global Machine Scope: Work from any folder or repository; your agent can recall related work across projects without rigid directory silos.
- 📜 Strict Provenance: No hallucinated memories. Every retrieved passage links back to exact transcript timestamps, line offsets, and session IDs.
- 🛡️ Zero-Surprise Permissions: Runs in your user session through systemd on Linux or a launchd LaunchAgent on macOS, with private mode
0700directories and mode0600sockets. No root or sudo required.
Quickstart (30 Seconds)
1. Install package
pip install bl-context
On macOS, install into an isolated tool environment with uv:
uv tool install bl-context
Use Python 3.10 or newer and install the Codex CLI before onboarding. Run onboarding from a logged-in macOS desktop session. The LaunchAgent starts at login and uses the installed Python environment; keep that environment available.
2. Onboard your agent
blctx install codex
The interactive onboarding wizard will:
- Initialize private user directories (
0700; filesystem permissions, not encryption). - Start the lightweight background daemon (
blctxd) as a systemd user service on Linux or a LaunchAgent on macOS. - Register the Model Context Protocol (MCP) server with Codex.
- Install the
base-layer-contextrecall skill. - Verify local CPU embeddings (
BAAI/bge-small-en, 384 dimensions). - Index recent sessions and verify end-to-end memory retrieval health.
3. Approve hooks on next launch
When prompted during installation, choose Enable automatic capture (the recommended default). On your next Codex launch, open /hooks to review and trust the 3 local Context handlers.
What to Ask Your Agent
Once onboarded, interact with your agent normally. When you need past context, simply ask:
- "Summarize what we worked on over the last 3 days."
- "Where did we leave off on the database migration?"
- "What decisions were made regarding sensor calibration yesterday?"
- "Review recent test failures and uncommitted experiments."
Explicit Tagged Notes
Agents can also persist durable, tagged authored notes at key project milestones:
"Save a progress update: sensor bridge calibrated with 0.02ms latency. Tag it #sensors #calibration."
Notes are committed to SQLite instantly and become immediately retrievable.
How It Works: Local Privacy Architecture
Base Layer Context operates as an offline, single-writer daemon communicating over a private Unix socket and the standard Model Context Protocol (MCP):
The 4 Local Components
- The CLI (
blctx): High-level onboarding, health diagnostics, manual search, and transcript exploration. - The User Daemon (
blctxd): Single-writer daemon managing SQLite WAL and Qdrant local vector storage. Independent worker threads ensure queries never block during index synchronization. - The Stdio MCP Server: Exposes 6 standard tools (
recent_context,search_context,get_context,context_status,open_session,log_update) directly to Codex. - Lifecycle Hooks: Three lightweight handlers (
SessionStart,Stop,SessionEnd) that enqueue transcript snapshots into SQLite in under 2ms without holding your conversation open.
Everyday CLI Commands
Health & Diagnostics
# Check current readiness and installation health
blctx status
# Diagnose system health, verify daemon, and inspect checks
blctx doctor
Transcript Exploration (blctx explore)
Safely inspect local Codex transcript files before importing them:
# List the newest 20 transcripts on your machine
blctx explore
# Preview conversation turns and classified records
blctx explore /path/to/session.jsonl --limit 3
# View raw JSONL records, token boundaries, and byte positions
blctx explore /path/to/session.jsonl --view raw --limit 5
Terminal Memory Queries
Query your agent's memory directly from your terminal:
# View recent turns across the last 3 days
blctx recent --days 3
# Semantic search across historical sessions
blctx search "why did we switch to batched inference?"
# Check indexing status and background jobs
blctx index-status
Uninstallation & Clean Removal
# Deactivate integration, stop daemon, and remove hooks (retains database)
blctx uninstall codex
# Complete purge (removes all database records and vectors; preserves transcripts)
blctx uninstall codex --purge
Security, Permissions & Storage Layout
Context enforces strict file permission boundaries:
| Purpose | Path | Mode | Access |
|---|---|---|---|
| Data | ~/.local/share/bl-context/ |
0700 |
SQLite database (context.db, 0600) and Qdrant vectors |
| Config | ~/.config/bl-context/ |
0700 |
Systemd user service unit (blctxd-*.service) |
| Cache | ~/.cache/bl-context/ |
0700 |
Pinned FastEmbed model weights (SHA-256 verified) |
| State | ~/.local/state/bl-context/ |
0700 |
Installation manifest & Unix socket (daemon.sock, 0600) |
On macOS the defaults are:
| Purpose | Path |
|---|---|
| Data | ~/Library/Application Support/bl-context/data/ |
| Config | ~/Library/Application Support/bl-context/config/ |
| Cache | ~/Library/Caches/bl-context/ |
| State & logs | ~/Library/Application Support/bl-context/state/ (installation.json, daemon.sock, daemon.log) |
| LaunchAgent | ~/Library/LaunchAgents/com.baselayer.context.<installation-id>.plist |
The same private directory and file permissions apply on both platforms. The LaunchAgent uses an absolute executable and explicitly pinned storage paths, so it works without your interactive shell's PATH. macOS may list the Python executable in System Settings → General → Login Items & Extensions; allow it to run in the background if prompted. Codex hook trust is a separate approval in /hooks.
- Overrides: Both platforms respect absolute
XDG_DATA_HOME,XDG_CONFIG_HOME,XDG_CACHE_HOME, andXDG_STATE_HOME, appendingbl-context/. Relative XDG values use the platform defaults.BLCTX_DATA_DIR,BLCTX_CONFIG_DIR,BLCTX_CACHE_DIR, andBLCTX_STATE_DIRoverride exact directories; the installer uses these to pin native paths for child processes. All four locations must remain separate. On macOS, the LaunchAgent always lives in~/Library/LaunchAgentsso it loads at login. - Long paths: macOS Unix socket paths are limited to 103 bytes. If your home/state path exceeds this, select a shorter private state location with
XDG_STATE_HOMEbefore installing and retain that override for CLI use. - Isolation: No sudo, no system-level daemon, no open network ports.
Documentation & Contributing
- Developer & Contributor Guide: Test harnesses, systemd and launchd integration testing, focused step flags (
--step), and MCP tool specifications.
License
MIT License © 2026 John Furr
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 bl_context-0.1.0.tar.gz.
File metadata
- Download URL: bl_context-0.1.0.tar.gz
- Upload date:
- Size: 101.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
cc0a2f02ecf6a99d417aff03b67831d881eb23e369f4294633ceb06c7a6e2085
|
|
| MD5 |
b8bcadadafcedd9178d82f83b22e1928
|
|
| BLAKE2b-256 |
85019b696252b11d24ba5906ffd1295d4aefabd44e13d20b2d6111949b6a98fd
|
Provenance
The following attestation bundles were made for bl_context-0.1.0.tar.gz:
Publisher:
publish.yml on gnulnx/Context
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
bl_context-0.1.0.tar.gz -
Subject digest:
cc0a2f02ecf6a99d417aff03b67831d881eb23e369f4294633ceb06c7a6e2085 - Sigstore transparency entry: 2797767913
- Sigstore integration time:
-
Permalink:
gnulnx/Context@c368e6af7e810a547d5909797290ee8d11eb5398 -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/gnulnx
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@c368e6af7e810a547d5909797290ee8d11eb5398 -
Trigger Event:
release
-
Statement type:
File details
Details for the file bl_context-0.1.0-py3-none-any.whl.
File metadata
- Download URL: bl_context-0.1.0-py3-none-any.whl
- Upload date:
- Size: 78.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e501eb33a5cb718351fec5cd8c9b9d9f90ea587bfb19475d9f85490cd5d5388d
|
|
| MD5 |
b8231cc1e89577e83cb25c79517cdfae
|
|
| BLAKE2b-256 |
c7437f5ba3db3552680e90a39d058a4314ddc0b8ca92c6f617014578a745d51c
|
Provenance
The following attestation bundles were made for bl_context-0.1.0-py3-none-any.whl:
Publisher:
publish.yml on gnulnx/Context
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
bl_context-0.1.0-py3-none-any.whl -
Subject digest:
e501eb33a5cb718351fec5cd8c9b9d9f90ea587bfb19475d9f85490cd5d5388d - Sigstore transparency entry: 2797767968
- Sigstore integration time:
-
Permalink:
gnulnx/Context@c368e6af7e810a547d5909797290ee8d11eb5398 -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/gnulnx
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@c368e6af7e810a547d5909797290ee8d11eb5398 -
Trigger Event:
release
-
Statement type: